Squid 内存溢出导致的 FATAL: xcalloc: Unable to allocate 1 blocks of 4112 bytes! 报错让我纠结了有几天,看官方FAQ 说此问题可能是由于内存不足或者是 ulimit �d 限制的原因,可是排查了一下都不是这样,后来终于在网上看到一位同学提到,此原因是因为在编译的时候开启了-enable-dlmalloc 参数,况且 squid 又开启了大内存(这里的这个大内存可以理解为 cache_mem 设置的比较大,也可以理解为因为磁盘缓存文件数量多,导致的 index table 占用内存过大,因为我发现就算 cache_mem 设置为 128m时,当 squid 进程占用的内存达到 1g 左右的时候也会出现类似的问题);而dlmalloc是squid在某些系统本身malloc太烂的情况的代替方案,dlmalloc已经很老,且不支持2G以上内存。
看到网上都在建议使用 tcmalloc 做内存的优化管理,我也尝试了,但是还没有去对比,系统自带的 malloc 函数和 tcmalloc 的性能有多大的差异。
下面贴一下编译安装 tcmalloc 的过程
64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
安装google-perftools,使用TCMalloc,与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高服务器在高并发情况下的性能,降低系统负载。由于google-perftools需要libunwind,到http://nongnu.askapache.com/libunwind/下载最新版本的libunwind,文件名为libunwind-0.99.tar.gz。到http://google-perftools.googlecode.com下载最新版本的google-perftools,文件名为google-perftools-1.5.tar.gz。进行安装:
安装libunwind-0.99.tar.gz
#tar -xzvf libunwind-0.99.tar.gz
#cd libunwind-0.99
#CFLAGS=-fPIC ./configure
#make CFLAGS=-fPIC
#make CFLAGS=-fPIC install
安装google-perftools-1.5.tar.gz
#tar -xzvf google-perftools-1.5.tar.gz
#cd google-perftools-1.5
#./configure
#make
#make install
运行如下命令:
#echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
#ldconfig
下载squid,运行如下命令:
#http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz
进行安装:
#tar -xzvf squid-2.7.STABLE9.tar.gz
#cd squid-2.7.STABLE9
#./configure --prefix=/usr/local/squid --sysconfdir=/etc/squid --enable-removal-policies=heap,lru --enable-linux-netfilter --enable-storeio=ufs,aufs --enable-kill-parent-hack --enable-epoll --disable-poll --disable-ident-lookups --disable-carp --enable-delay-pools --disable-wccp --disable-wccpv2 --enable-snmp --enable-cachemgr-hostname=squid --enable-cache-digests --with-pthreads --enable-gnuregex --with-aio
#cd src
#vi Makefile
找到如下地方:
squid_LDADD = \
-L../lib \
在下面增加一行,变成如下:
squid_LDADD = \
-L../lib \
-ltcmalloc \
找到如下地方:
LDADD = -L../lib -lmiscutil -lrt -lpthread -lm
修改为:LDADD = -L../lib -lmiscutil -lrt -lpthread -lm -ltcmalloc
#cd ..
#make
#make install
squid安装完毕进行配置。在进行配置的时候,对cache分区采用reiserfs格式进行格式化,在挂载的时候使用noatime,nodiratime选项。
没有评论:
发表评论