天天看點

php Allocator Jemalloc TCMalloc那個記憶體配置設定器比較好?

php Allocator Jemalloc TCMalloc那個記憶體配置設定器比較好? php一鍵安裝腳本可以選擇是否安裝記憶體優化 1: Don't install Memory Allocator. (Default) 2: Install Jemalloc 3: Install TCMalloc ptmalloc 是glibc的記憶體配置設定管理 tcmalloc 是google的記憶體配置設定管理子產品 jemalloc 是BSD的提供的記憶體配置設定管理

php Allocator Jemalloc TCMalloc那個記憶體配置設定器比較好?

php一鍵安裝腳本可以選擇是否安裝記憶體優化

You have 3 options for your Memory Allocator install.

1: Don't install Memory Allocator. (Default)

2: Install Jemalloc

3: Install TCMalloc

----------------------------------------

ptmalloc 是glibc的記憶體配置設定管理

tcmalloc 是google的記憶體配置設定管理子產品

jemalloc 是BSD的提供的記憶體配置設定管理

三者的性能對比參考從網上的一個圖如下:

php Allocator Jemalloc TCMalloc那個記憶體配置設定器比較好?
測試代碼如下:

1: #include <iostream>                                                                                                            
2: #include <map>      
3:        
4: using namespace std;      
5: int main(int argc, char**argv) {      
6:   cout << "Hello world" << endl;      
7:   std::map<int,int> int_map;      
8:   for (int i = 0; i < 10000000; ++i) {      
9:     int_map.insert(std::map<int,int>::value_type(i,i));      
10:   }      
11:   return 0;      
12: }      

都是執行一個map insert 100W次操作。

為了測試友善,我們生成了3個binary,分别連結使用jemalloc和tcmalloc 和ptmalloc的庫做對比:

ldd jemalloc_test 

    linux-vdso.so.1 =>  (0x00007fffc6fc3000) 

    libjemalloc.so.1 => /usr/local/lib/libjemalloc.so.1 (0x00007f45181aa000) 

    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4517ea4000) 

    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4517c1e000) 

    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4517a08000) 

    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4517673000) 

    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4517454000) 

    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4517250000) 

    /lib64/ld-linux-x86-64.so.2 (0x00007f45183f2000)

ldd tcmalloc_test 

    linux-vdso.so.1 =>  (0x00007fff94160000) 

    libtcmalloc.so.0 => /usr/lib/libtcmalloc.so.0 (0x00007f20107dc000) 

    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f20104d6000) 

    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2010250000) 

    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f201003a000) 

    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f200fca5000) 

    libunwind.so.7 => /usr/lib/libunwind.so.7 (0x00007f200fa8b000) 

    /lib64/ld-linux-x86-64.so.2 (0x00007f2010a68000)

ldd ptmalloc_test 

    linux-vdso.so.1 =>  (0x00007fff08501000) 

    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6c156000) 

    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6bed1000) 

    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6bcba000) 

    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6b925000) 

    /lib64/ld-linux-x86-64.so.2 (0x00007f7e6c483000)

然後分别執行各程式,使用time統計時間如下:

time./jemalloc_test 

Hello world

real    0m9.927s 

user    0m9.650s 

sys    0m0.250s

time ./tcmalloc_test 

real    0m9.836s 

user    0m9.410s 

sys    0m0.410s

time ./ptmalloc_test 

real    0m11.890s 

user    0m11.520s 

sys    0m0.360s

jemalloc和tcmalloc的性能不分伯仲,而ptmalloc則要低一些。

 ===========================

lnmp中的記憶體管理庫TCMalloc和Jemalloc比較

lnmp一鍵安裝包安裝系統的時候一般用Jemalloc

TCMalloc

優點:很多系統都可以用源來安裝 TCMalloc ,而且支援的 gcc 編譯庫比較新。

缺點:軟體是在 Google Perftools 下的,安裝的時候如果不編譯好可能會安裝到我們不需要的其他軟體,而且 Google Perftools 安裝過程比較複雜還需要安裝相應的庫。