星期四, 三月 29, 2007

Linux MySQL 使用 TCMalloc

之前看 DK 長輩寫了這篇Linux 上 MySQL Scalability 的問題, 看完後, 沒什麼好說的, 當然就是裝裝看 TCMalloc(Thread-Caching Malloc) 囉~

以下來記錄 Debian 安裝 TCMalloc 並使用在 MySQL 上的步驟...

首先前置作業是抓 TCMalloc, 先到 Google Performance Tools, 然後找到 google-perftools-0.8.tar.gz 下載.

再來 Debian 也要建置基本環境, 步驟如下:

  • apt-get install devscripts pbuilder(若 /usr/bin/debuild 不存在, 就安裝 devscripts, pbuilder 這兩個 package)
然後安裝 TCMalloc:
  1. tar zxvf google-perftools-0.8.tar.gz
  2. cd google-perftools-0.8
  3. make dist
  4. cd packages
  5. ./deb.sh # 產生 debian package
  6. dpkg -i packages/debian-4.0/libgoogle-perftools0_0.1-1_i386.deb
  7. dpkg -L libgoogle-perftools0 # 看一下到底裝了什麼東西
  8. ln -s /usr/lib/libtcmalloc.so.0 /usr/lib/libtcmalloc.so
  9. vim /usr/bin/mysqld_safe # 修改 mysql 啟動, 讓他使用 TCMalloc
  10. 修改 第 387 行, 於此行最前面加入 LD_PRELOAD="/usr/lib/libtcmalloc.so"(在 mysql 啟動前先載入環境變數(mysql 啟動的 script 就是 /usr/bin/mysqld_safe), 讓 tcmalloc = glibc 的 malloc(), 於最前面加入環境變數即可)
    387 行就是 mysql start 的那行命令, 此行修改完成如下:
    LD_PRELOAD="/usr/lib/libtcmalloc.so" $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file    =$pid_file --skip-external-locking 2>&1 | $ERR_LOGGER -t mysqld & wait
  11. /etc/init.d/mysql restart # 看看能不能順利啟動吧.. XD
  12. 要注意每次 apt-get upgrade, dist-upgrade 時如果有 upgrade mysql, 此 script 要自行修改(不過不修改也是不會有問題, 只是就會變回使用原本 gnu 的 malloc() 而已)

PS: 不要將 TCMalloc 整個拿來取代 malloc, 會出問題(不要將環境變數整個設下去)

測試程式:

#include <stdlib.h>
int main(int argc, char** argv) {
int times = 10000;
int i = 0;
if (argc == 2)
times = atoi(argv[1]);
for (i = 0; i < times; i++) {
char *ptr = malloc(1024);
/*printf(%d\n, i);*/
free(ptr);
}
}
  • cc -o malloc malloc.c -lpthread # compile
  • time ./malloc 100000000 # 測試 gnu malloc 速度(測試跑完是 13.392 secs)
  • time LD_PRELOAD="/usr/lib/libtcmalloc.so" ./malloc 100000000 # 測試 TCMalloc 速度(測試跑完是 9.558 secs)

結論就是, TCMalloc 會比較快.. XD, 要不要用的話, 自己再看著辦吧... XD

 

相關標籤
Add this page to del.icio.us Add this page to Yahoo Taiwan's bookmark Add this page to MyShare

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~