TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。其作者宣称tcmalloc相对于glibc2.3 malloc(aka-ptmalloc2)在内存的分配上效率和速度有6倍的性能提高,tcmalloc的常用场景是用于加速MySQL,不过据Wikipedia的hacker(Domas Mituzas)说,tcmalloc不仅仅对MySQL起作用,对squid也同样起作用(网上也有很多人在nginx上启用tcmalloc了),不过目前squid并没有official way来使用tcmalloc。
TCMalloc的实现原理和测试报告请见一篇文章:《TCMalloc:线程缓存的Malloc》
那么让我们赶紧给squid加载上tcmalloc,提高cache服务器在高并发情况下的性能,降低系统负载吧。
因为服务器是64位OS,所以要先安装libunwind库。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。(又cp一句话,^=^)
bashwget 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
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
普通的./configure&&make&&make install可不行哟~
然后开始安装tcmalloc:
bashwget http://google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz
tar zxvf google-perftools-1.8.1.tar.gz
cd google-perftools-1.8.1/
./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --enable-minimal --disable-dependency-tracking
make && make install
然后配置动态链接库,因为是之前是默认安装,这里自然就是/usr/local/lib了。
bashecho "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
然后给squid加载tcmalloc。官方推荐是重新编译:
先./configure,然后vi src/Makefile,修改如下:
....
squid_LDADD =
-L../lib \
-ltcmalloc_minimal \
\
repl/libheap.a repl/liblru.a \
....
....
data_DATA =
mib.txt
LDADD
= -L../lib -lmiscutil -lpthread -lm -lbsd -lnsl -ltcmalloc_minimal
EXTRA_DIST =
....
保存,make&&make install,OK! 如果不愿意重新编译,那么动态加载吧。在/home/squid/sbin/squid -s之前执行export LD_PRELOAD=/usr/local/lib/libtcmalloc_minimal.so就可以了。 最后运行lsof -n | grep tcmalloc看看,如果有 squid 3811 root mem REG 202,1 1364560 446102 /usr/local/lib/libtcmalloc.so.0.0.0 squid 3813 squid mem REG 202,1 1364560 446102 /usr/local/lib/libtcmalloc.so.0.0.0 这样的输出,加载成功。效果如何,跑上几天再说咯~ 另: 据网上说,如果squid的configure参数中,有–with-large-files的话,是没法加载tcmalloc的。