这个tcmalloc很出名了,是google出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定.

不过这个模块不是系统自带的,没有原生安装,所以需要手动去安装操作,稍微有点麻烦.这个模块包含在google封装的工具集google-perftools里面.

安装

先安装相关运行库,因为是用c++写的,需要make,还有一个运行环境libunwind


yum -y <span class="token function">install</span> gcc <span class="token function">make</span> gcc-c++ libunwind

然后下载并安装google-perftools


<span class="token comment">#下载源码包</span>
<span class="token function">wget</span> https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz
<span class="token comment">#解压源码包</span>
<span class="token function">tar</span> xf gperftools-2.5.tar.gz
<span class="token comment">#开始编译安装</span>
./confighre
<span class="token function">make</span>
<span class="token function">make</span> <span class="token function">install</span>
<span class="token comment">#搜索一下,找到安装好的相关C库文件</span>
<span class="token function">find</span> / -name libtcmalloc.so
/usr/local/lib/libtcmalloc.so
/opt/gperftools-2.5/.libs/libtcmalloc.so
<span class="token comment">#创建lib库软连接,这样就不需要用ldconfig了</span>
<span class="token function">ln</span> -sf /usr/local/lib/libtcmalloc.so /usr/lib/
<span class="token function">ln</span> -sf /usr/local/lib/libtcmalloc.so /usr/lib64/
<span class="token comment">#完成</span>
ll /usr/lib/libtcmalloc.so
lrwxrwxrwx. 1 root root 29 Jan 23 12:05 /usr/lib/libtcmalloc.so -<span class="token operator">&gt;</span> /usr/local/lib/libtcmalloc.so

安装完成,就等程序调用了,懂开发的可以测试一下,我这里直接用mysql调用.

===============================================

因为这个软件略难找,这个链接也不知道什么时候失效,我上传到51cto下载了

http://down.51cto.com/data/2437899
===============================================

配置mysql使用

使用mysql调用这个模块,有两种方法,一种就是加载到mysqld_safe启动,另一种就是加载的配置文件.不过,都要重启mysql程序才能生效,其他程序想要使用tcmalloc功能亦然.

没有项目加载的话,下面这条命令是没有返回的


<span class="token function">lsof</span> -n <span class="token operator">|</span> <span class="token function">grep</span> tcmalloc

然后,我们加到mysql的配置文件my.cnf来使用


<span class="token comment">#打开mysql配置文件,添加下面两行</span>
vim /usr/local/mysql/my.cnf
    <span class="token keyword">.</span>
    <span class="token keyword">.</span>
    <span class="token keyword">.</span>
<span class="token punctuation">[</span>mysqld_safe<span class="token punctuation">]</span>
malloc-lib<span class="token operator">=</span>tcmalloc
    <span class="token keyword">.</span>
    <span class="token keyword">.</span>
    <span class="token keyword">.</span>
<span class="token comment">#重启mysql</span>
/etc/init.d/mysql restart

注意:如果是正常安装并加载libtcmalloc.so的话,是不会报错的,重启将直接生效.如果有报错,则需要研究一下哪里做错了,或者尝试重新安装.

现在来看看使用上没有


<span class="token function">lsof</span> -n <span class="token operator">|</span> <span class="token function">grep</span> tcmalloc
mysqld     3665         mysql  mem       REG              253,0    1050408  100663894 /usr/local/lib/libtcmalloc_minimal.so.4.3.0
mysqld     3665  3666   mysql  mem       REG              253,0    1050408  100663894 /usr/local/lib/libtcmalloc_minimal.so.4.3.0
mysqld     3665  3669   mysql  mem       REG              253,0    1050408  100663894 /usr/local/lib/libtcmalloc_minimal.so.4.3.0

可以明确看到,mysql已经加载上这个模块了,那就可以用了