我的网站上访问我的MySQL数据库的页面性能随着时间的推移变慢,直到我重新启动我的服务器。 (静态页面不受影响。)重新启动mysqld本身没有帮助,但重新启动整个服务器有帮助。 我已经尝试过不同的MySQL性能调整和启用caching,没有一个帮助。
它起初速度非常快,但几天后变得更慢,最终变得难以忍受。 我从命令行运行的任何mysql操作都非常好,包括连接到mysql,连接到数据库以及运行查询。 慢查询日志不显示任何exception。 但是,我的网站上的任何与mysql连接的页面运行速度都很慢。
如果我重新启动我的服务器,一切都会再次运行,直到它再次变慢。
my.cnf文件:
max_connections = 500 query_cache_size = 10M tmp_table_size = 16M max_heap_table_size = 16M thread_cache_size = 4 innodb_buffer_pool_size = 7G symbolic-links=0
顶部,服务器最多3天:

顶部,服务器重启后5分钟: 
我应该采取哪些措施来隔离和解决这个问题?
你有76%的系统等待,最有可能是因为交换繁重。
mysqltuner.pl来查找影响内存使用情况的variables free -m看看有多lesscaching iotop看看谁在吃IO 听起来你好像交换不好。
你的问题可能是双缓冲。 尝试添加到您的my.cnf(并重新启动您的MySQL服务器,显然):
innodb_flush_method = O_DIRECT
在操作系统级别降低交换性,如下所示:
echo 0 > /proc/sys/vm/swappiness
看起来像OSSEC的防火墙进程是罪魁祸首 – 它占用了太多的CPU,并使一切陷入困境。 当重新configuration时,所有的东西都再次顺利运行。
在你的网页中,你是closures你的数据库连接并释放你使用的内存? 如果不是,你应该是。
看看你的系统规格在3天 – 你的系统和内存使用情况已经上涨,有限的免费。 由于你的命令行查询工作正常,没有滞后,但是你的网页很慢,所以你的内存泄漏可能在你的web服务器内存空间(因为命令行工作正常,它不在mySQL中)。
马克H