星期四, 三月 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

 

作者 jon ( News-Unix ) :: 迴響 (0) :: 靜態連結網址

相關標籤

Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


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