您好,登錄后才能下訂單哦!
什么是google-perftools?
google-perftools是google公司開發的一款針對 C/C++ 程序的性能分析開源工具,使用該工具可以對 CPU 時間片、內存等系統資源的分配和使用進行分析
google-perftools包含四個工具,分別是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,其中我們本次需要的一個工具TCMalloc是google-perftools的其中一個工具,用于優化內存分配的效率和速度,幫助在高并發的情況下很好的控制內存的使用
運維為什么要使用google-perftools?
使用google開發的google-perftools優化nginx和mysql的內存分配效率和速度,幫助在高并發的情況下控制內存的使用。但是,nginx的內存占用其實是很少的,一個進程占用的內存大概只有12M左右,所以google-perftools對nginx的優化效果可能不太明顯
什么是TCMalloc工具?
上面已經說過TCMalloc是google-perftools的一個工具與標準的glibc庫的Malloc相比,TCMalloc庫在內存分配效率和速度上要高很多,這在很大程序上提高了服務器在高并發情況下的性能,從而降低系統的負載如何為Nginx添加TCMalloc庫支持,要安裝TCMalloc庫,需要安裝libunwind和gperftools兩個軟件包,libunwind庫為基于64為CPU操作系統的程序提供了基本函數調用鏈和函數調用函數寄存器功能,32位操作系統不需要安裝。
通過上面的三連問我們已經大致了解google-perftools是什么玩意了,那么下面我們將進行如何安裝和使用
安裝編譯工具:
yum -y install gcc make
yum -y install gcc gcc-c++
安裝libunwind:
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz
tar zxvf libunwind-0.99.tar.gz
cd libunwind-0.99/
CFLAGS=-fPIC ./configure --prefix=/usr
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
安裝google-perftools:
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.7/gperftools-2.7.tar.gz
tar zxvf gperftools-2.7.tar.gz
cd gperftools-2.7
./configure --enable-frame-pointers --enable-libunwind --with-tcmalloc-pagesize=32
或
./configure --enable-frame-pointers
make && make install
注:如果是64位系統,需要先安裝libunwind,再在configure gperftools的時候,添加--enable-frame-pointers參數
安裝nginx并添加參數
安裝nginx省略,如果nginx是在安裝google-perftools前已經安裝了,那么需要考慮是否平滑升級及平滑重啟,平滑升級加入參數即可
例: ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-google_perftools_module
上面雖然已經安裝好,但是還是不能夠使用,因為沒有在nginx配置文件中加入這個模塊
1.添加線程目錄
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
2.做軟連接或引用動態庫
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
3.修改nginx.conf配置文件,在pid行添加以下信息,表示開啟這個模塊
google_perftools_profiles /tmp/tcmalloc;
然后啟動或重啟nginx
驗證即可
nginx 44112 nobody 10w REG 8,4 0 1044489 /tmp/tcmalloc.44112
一個線程會有一個記錄文件,由于我只開了一個線程,所以只有一個記錄文件
擴展:
啟動nginx,發現缺少libprofiler.so.0動態庫的支持
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
這是因為perftools是通過Linux的LD_PRELOAD達到java應用程序運行時,當調用malloc時換用它的libtcmalloc.so
查找系統下是否有libprofiler.so.0動態庫
whereis libprofiler.so.0
libprofiler.so: /usr/local/lib/libprofiler.so.0 /usr/local/lib/libprofiler.so
由于不在nginx程序查找的目錄下,所以需要創建軟鏈接
評估缺少的動態庫支持,可通過ldd /usr/local/nginx/sbin/nginx的方式,查看"not found"部分。
ln -s /usr/local/lib/libprofiler.so.0.4.18 /lib64/libprofiler.so.0
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。