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

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

在我重新启动服务器之前,我网站上访问 mysql 数据库的页面的性能会随着时间的推移而变慢。(静态页面不受影响。)重新启动 mysqld 本身没有帮助,但重新启动整个服务器会有所帮助。我尝试了各种 MySQL 性能调整并启用了缓存,但都无济于事。

一开始它非常快,但几天后就变得慢很多,最终变得慢得令人无法忍受。我从命令行运行的任何 mysql 操作都完全正常,包括连接到 mysql、连接到数据库和运行查询。慢查询日志没有显示任何异常。但我的网站上任何与 mysql 连接的页面运行都非常慢。

如果我重新启动服务器,一切都会再次快速运行,直到再次变慢。

我的.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分钟

我应该采取哪些步骤来隔离并解决这个问题?

答案1

听起来你交换得很糟糕。

您的问题可能是双缓冲。尝试将其添加到您的 my.cnf(当然,还要重新启动 mysql 服务器):

innodb_flush_method = O_DIRECT

并在操作系统级别降低 swapiness,如下所示:

echo 0 > /proc/sys/vm/swappiness

答案2

您的系统等待时间为 76%,很可能是由于频繁交换造成的。

  1. 用来mysqltuner.pl查找影响内存使用量的变量
  2. 在 top 中按“m”查看哪些占用了内存
  3. 用于free -m查看缓存量
  4. 用来iotop查看谁在消耗 IO

答案3

看起来 OSSEC 防火墙进程是罪魁祸首 - 它占用了太多 CPU 并使一切都陷入困境。重新配置后,一切都恢复正常。

答案4

在您的网页中,您是否关闭了数据库连接并释放了使用的内存?如果没有,您应该这样做。

看看 3 天后的系统规格 - 您的系统和内存使用率已上升,但可用资源有限。由于您的命令行查询运行良好且没有延迟,但您的网页速度很慢,因此存在内存泄漏,可能位于您的 Web 服务器内存空间中(由于命令行运行良好,因此不在 mySQL 中)。

马克·H

相关内容