MySQL 服务器上的平均负载过高

MySQL 服务器上的平均负载过高

最近我们的 MySQL 服务器出现了严重的性能问题。应用服务器和数据库服务器是分开的。在数据库服务器端,平均负载迅速升高。CPU 使用率也居高不下(约 200%)。

平均负载:16.91、21.48、30.91

在应用程序端,我们手动关闭了手动打开的数据库连接。我的cnf也可以使用以下参数进行一些配置:

innodb_buffer_pool_size = 4G
query_cache_type        = 1
wait_timeout            = 1800

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 32

query_cache_limit       = 5M
query_cache_size        = 640M
query_cache_type        = 1

但仍然没有明显的改善。服务器使用率仍然很高。配置可能出了什么问题?如何保持服务器平均负载正常(或至少接近正常)?

答案1

为了解决这个问题,你(或你的代表)需要收集一些关于你的系统的数据,并使用以下方法进行分析:科学的方法(或者您喜欢的流程)。

您可以使用系统工具(如 sar、free、iostat、vmstat 等)收集数据。

安装监控来收集和跟踪数据12

阅读日志通常也很有帮助。

现在您已经了解了系统的运行情况,您可以开始提出问题、进行试验并分析结果。


  1. 您真正想要解决的问题是什么?

我的平均负载异常高。1

  1. 现在我们知道了要解决的实际问题,我们有了一些方向。让我们收集一些信息来帮助我们找到解决方案。

    • 问题是否与时间有关?它是定期发生还是随机发生。
    • 检查您的日志,检查所有日志,而不仅仅是特定服务的日志,因为其他原因可能会导致问题。日志条目通常有时间戳,这是为了帮助您关联多个应用程序和服务之间的事件 - 使用它们。如有必要,也可以增加日志详细程度。
    • 观察系统正在做什么。使用 top、vmstat、iostat、sar、ps、tcpdump 等工具,甚至全面监控。

  2. 分析您收集到的信息。当服务停止响应时,系统上究竟发生了什么?系统资源的状态如何?

  3. 采取适当的措施进行补救。希望您能清楚地知道发生了什么,内存不足,OOM 杀手开始发挥作用,您的交换活动太高,您的运行队列太长,您受到 iobound 等。如果情况不明显,那么您可能没有收集正确的数据 - 您知道该怎么做,请返回 2。

  4. 监控4.处引入的变更。

  5. 这些变化解决了问题吗?是好转了吗?还是恶化了?没有区别吗?接下来该怎么做取决于你发现了什么。你可能需要回到 2. 并收集更多相关数据,或者 3. 重新分析你拥有的数据,或者 4. 因为你已经确定了许多潜在的解决方案。

  6. 记录您的发现和所做的更改。

相关内容