Linux的虛擬內存管理有幾個關鍵概念:html
Linux 虛擬地址空間如何分佈?malloc和free是如何分配和釋放內存?如何查看堆內內存的碎片狀況?既然堆內內存brk和sbrk不能直接釋放,爲何不所有使用 mmap 來分配,munmap直接釋放呢 ?linux
Linux 的虛擬內存管理有幾個關鍵概念:
一、每一個進程都有獨立的虛擬地址空間,進程訪問的虛擬地址並非真正的物理地址;
二、虛擬地址可經過每一個進程上的頁表(在每一個進程的內核虛擬地址空間)與物理地址進行映射,得到真正物理地址;
三、若是虛擬地址對應物理地址不在物理內存中,則產生缺頁中斷,真正分配物理地址,同時更新進程的頁表;若是此時物理內存已耗盡,則根據內存替換算法淘汰部分頁面至物理磁盤中。 redis
TCMalloc的全稱爲Thread-Caching Malloc,是谷歌開發的開源工具google-perftools中的一個成員。與標準的glibc庫的Malloc相比,TCMalloc庫在內存分配效率和速度上要高不少,這在很大程度上提升了服務器在高併發狀況下的性能,從而下降了系統的負載。緩存
使用:利用TCMalloc替換Nginx和Redis默認glibc庫的malloc內存分配性能優化
redis並無本身實現內存池,沒有在標準的系統內存分配器上再加上本身的東西。因此係統內存分配器的性能及碎片率會對redis形成一些性能上的影響。
使用:redis內存管理方式:支持tcmalloc,jemalloc,malloc三種內存分配服務器
更多參考:併發