检查 TCMalloc 是否生效的方法的问题

红薯 发布于 2009/06/18 17:20
阅读 3K+
收藏 3

TCMalloc (google-perftools) 是用于优化C++写的多线程应用,比glibc 2.3的malloc快。这个模块可以用来让MySQL在高并发下内存占用更加稳定。

安装方法请看:http://www.oschina.net/bbs/thread/4467

一般装完这个东东后,可以通过下面的方法来检测是否生效

/usr/sbin/lsof -n | grep tcmalloc

如果安装生效,那么会显示如下信息

mysqld 25580 mysql  mem       REG        3,1  1477689    1655725 /usr/local/lib/libtcmalloc.so.0.0.0

但是

这个方法在 32 位系统下没问题,但在 64 位系统下就看不到任何输出,但事实上已经生效了,不知道何故。

加载中
0
范堡
范堡

今天终于找到为何在 x64 位下 使用 /usr/sbin/lsof -n | grep tcmalloc 检测没结果的原因

首先,X64 位系统必须安装 libunwind ,而版本推荐是 0.99

然后,需要创建软连接 ln -s /usr/local/lib/libunwind.so.7 /usr/lib64/

跟着,编辑 mysqld_safe  ,确认在最上一行添加有 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

最后,重新启动 mysql 并再次用 /usr/sbin/lsof -n | grep tcmalloc 命令检测。

得出结果:

mysqld    27683     mysql  mem       REG                8,1    1675447    9830428 /usr/local/lib/libtcmalloc.so.0.0.0

0
红薯
红薯

说是使用 MySQL 5.4 以后的版本,就无需这么麻烦了,已经集成了。

0
张宋付
张宋付

其实使用google-mysql 补丁也会在你的源码编译进去的,不需这样载入。其实性能也不会有很多提高。

还是用google-mysql 补丁把它编译进去进行一个完美整合。

0
benney
benney
应该是程序运行时查找库路径优先顺序的问题吧,在LD_PRELOAD环境变量中把libtcmalloc.so.0.0.0库放在最前面,另外可以ldd program_file_name看看程序到底依赖哪些库。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部