全部博文(930)
分类: LINUX
2010-11-14 11:51:21
问题是:网站访问量不高,高峰时并发数在300-400之间。CPU比较高,在30-80%之间波动得厉害,使用top命令可以看到是mysql进程导致,同时用iostat和sar查看iowait值很高在20-30之间。 但是系统还可以稳定运行,然后周期性的出现swap分区占用率攀升,直接导致应用程序无法连接数据库。不知道这是不是mysql的swap颠簸的问题。没解决办法的时候只好经常监控内存的使用情况,碰到swap开始攀升的时候重启MySQL服务。一般这个周期在一个星期左右。 后来在网上搜到了tcmalloc,说是这个东西可以让MySQL在高并发下性能也很稳定,同时也说了MySQL这个问题是因为malloc内存分配函数的bug,这个bug会使高并发的MySQL性能急剧下降。 决定试试。 系统是64位的RedHat Enterprise Linux 5.0 。在64位系统下需要安装另外一个包libunwind。然后下载tcmalloc包,按默认方式编译和安装成功后在 mysqld_safe 中加入 LD_PRELOAD="/usr/local/lib/libtcmalloc.so" 重启MySQL。没有办法可以验证tcmalloc是否起效,只能再继续监控系统的运行状况。 经过一个多礼拜了,你可以看看下面一个抓自mrtg的图:
而且已经持续了一个多礼拜了。可以说效果相当相当的明显,非常令人满意。再也不用老去盯着mrtg看了。当然这是我的机器上现实的情况,不知道其他系统怎样。 libunwind: 详细的安装步骤: #tar zxvf libunwind-0.98.6.tar.gz #tar zxvf google-perftools-0.94.1.tar.gz 打开 mysqld_safe 脚本 (默认在/usr/bin/mysqld_safe) #service mysql restart |