MySQL逐渐变慢,直到服务器重启

我的网站上访问我的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天:

顶级3天

顶部,服务器重启后5分钟: 顶5分钟

我应该采取哪些措施来隔离和解决这个问题?

你有76%的系统等待,最有可能是因为交换繁重。

  1. 使用mysqltuner.pl来查找影响内存使用情况的variables
  2. 在顶部按“m”看看吃了什么记忆
  3. 使用free -m看看有多lesscaching
  4. 使用iotop看看谁在吃IO

听起来你好像交换不好。

你的问题可能是双缓冲。 尝试添加到您的my.cnf(并重新启动您的MySQL服务器,显然):

 innodb_flush_method = O_DIRECT 

在操作系统级别降低交换性,如下所示:

 echo 0 > /proc/sys/vm/swappiness 

看起来像OSSEC的防火墙进程是罪魁祸首 – 它占用了太多的CPU,并使一切陷入困境。 当重新configuration时,所有的东西都再次顺利运行。

在你的网页中,你是closures你的数据库连接并释放你使用的内存? 如果不是,你应该是。

看看你的系统规格在3天 – 你的系统和内存使用情况已经上涨,有限的免费。 由于你的命令行查询工作正常,没有滞后,但是你的网页很慢,所以你的内存泄漏可能在你的web服务器内存空间(因为命令行工作正常,它不在mySQL中)。

马克H