Linux的虛擬內存管理-如何分配和釋放內存,以提升服務器在高併發狀況下的性能,從而下降了系統的負載

Linux的虛擬內存管理有幾個關鍵概念:html

Linux 虛擬地址空間如何分佈?malloc和free是如何分配和釋放內存?如何查看堆內內存的碎片狀況?既然堆內內存brk和sbrk不能直接釋放,爲何不所有使用 mmap 來分配,munmap直接釋放呢 ?linux

Linux 的虛擬內存管理有幾個關鍵概念: 
一、每一個進程都有獨立的虛擬地址空間,進程訪問的虛擬地址並非真正的物理地址; 
二、虛擬地址可經過每一個進程上的頁表(在每一個進程的內核虛擬地址空間)與物理地址進行映射,得到真正物理地址; 
三、若是虛擬地址對應物理地址不在物理內存中,則產生缺頁中斷,真正分配物理地址,同時更新進程的頁表;若是此時物理內存已耗盡,則根據內存替換算法淘汰部分頁面至物理磁盤中。 redis

參考:linux環境內存分配原理 mallocinfo算法

 

TCMalloc的全稱爲Thread-Caching Malloc,是谷歌開發的開源工具google-perftools中的一個成員。與標準的glibc庫的Malloc相比,TCMalloc庫在內存分配效率和速度上要高不少,這在很大程度上提升了服務器在高併發狀況下的性能,從而下降了系統的負載緩存

使用:利用TCMalloc替換Nginx和Redis默認glibc庫的malloc內存分配性能優化

 

redis並無本身實現內存池,沒有在標準的系統內存分配器上再加上本身的東西。因此係統內存分配器的性能及碎片率會對redis形成一些性能上的影響。
使用:redis內存管理方式:支持tcmalloc,jemalloc,malloc三種內存分配服務器

 

 

 

更多參考:併發

2012年tcmalloc學習筆記之一高併發

使用Google的開源TCMalloc庫,提升MySQL在高併發狀況下的性能[張宴原創]工具

輕量級HTTP服務器Nginx(Nginx性能優化技巧)

TCMalloc:線程緩存的Malloc

TCMalloc優化MySQL、Nginx、Redis內存管理

相關文章
相關標籤/搜索