項目的線上服務器,在code中大量使用了std::map,發現就存在一個問題,這個map使用後,clear後內存並不能很好的釋放,這個主要就是std malloc的問題。可以嘗試使用jemalloc和tcmalloc這些三方的malloc庫。在目前我項目中,jemalloc的表現最符合需求。
所以我們在apache module中使用jemalloc。這樣map在clear的時候可以很好的釋放內存,不會造成服務器的內存壓力。
以下爲apache module如何安裝使用jemalloc的sample:
1.jemalloc的下載:
http://www.canonware.com/download/jemalloc/
使用最近版本的jemalloc:
http://www.canonware.com/download/jemalloc/jemalloc-3.5.0.tar.bz2
~$ wget http://www.canonware.com/download/jemalloc/jemalloc-3.5.0.tar.bz2
2.解壓下載下來的tar包
~$ tar jxvf jemalloc-3.5.0.tar.bz2
3.安裝jemalloc shell:
~$ ./configure --prefix=/usr/local
~$ make
~$ sudo make install
4.apache module使用jemalloc:
在apachectl腳本最前面中加入:
export LD_PRELOAD=/usr/local/lib/libjemalloc.so
5.檢查apache module是否正常引用了jemalloc:
~$ sudo cat/proc/$httpd_pid/maps