背景
最近有一個壓測任務(wù),比較物理機(jī)和容器云機(jī)器上服務(wù)的性能。前提是兩臺機(jī)器的配置CPU、內(nèi)存都一樣,且都是獨占機(jī)器,但是壓測結(jié)果大跌眼鏡物理機(jī)QPS居然連640都扛不住,而容器云機(jī)器能扛到2000。理論上來講物理機(jī)性能肯定是比容器云好的,但這究竟是為什么呢?經(jīng)多方定位發(fā)現(xiàn)rd同學(xué)在編譯代碼過程中設(shè)置jemalloc參數(shù)失敗,后重新設(shè)置重新壓測果然物理機(jī)性能優(yōu)于容器云性能。至于為什么物理機(jī)更優(yōu)秀當(dāng)然是因為容器云的硬件資源是在軟件層模擬出來導(dǎo)致的嘍,虛擬機(jī)沒有硬件實體,而物理機(jī)有實體。也就是說,物理機(jī)是有實體的硬件系統(tǒng),比如服務(wù)器等,而虛擬機(jī)是借助物理機(jī)虛擬出虛擬的硬件系統(tǒng)。
jemalloc作用
jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support
意思是說jemalloc干了malloc干的活,而且干得好一些,主要體現(xiàn)在避免內(nèi)存碎片與并發(fā)擴(kuò)展上。

jemalloc安裝并使用
- 下載:https://github.com/jemalloc/jemalloc/releases
- 下載包地址:jemalloc-4.2.1
-
tar -xjvf jemalloc-4.2.1.tar.bz2
生成的文件列表如下:
image.png - 在此目錄下預(yù)編譯
親測這個好使:./configure --prefix /usr/local/jemalloc
這個不好使:./configure –prefix=/usr/local/jemalloc
5.編譯:make -j8 && make install
生成的頭文件在include里,庫在lib里。
使用
在編譯鏈接時直接指向jemalloc即可:
gcc -g -c -o 1.o 1.c
gcc -g -o 1.out 1.o -L/usr/local/jemalloc/lib -ljemalloc
運行程序時可能會報找不到庫:

只要將jemalloc的庫被系統(tǒng)找到即可:
echo /usr/local/jemalloc/lib >> /etc/ld.so.conf
ldconfig
重新運行即可
實際開發(fā)機(jī)上直接:export ENABLE_JEMALLOC=true
