跟踪平均负载

tyl*_*erl 4 linux troubleshooting

*nix 机器上的“平均负载”是“运行队列的平均长度”,或者换句话说,正在做某事(或等待做某事)的平均进程数。虽然这个概念很容易理解,但解决问题可能不那么直接。

这是我今天工作的服务器上的统计数据,这让我想知道解决此类问题的最佳方法。这是统计数据:

  • 1GB 可用内存,0 交换空间使用
  • CPU 时间大约 20% 用户,30% 等待,50% 空闲(根据顶部)
  • 一次大约有 2 到 3 个进程处于“R”或“D”状态(使用 ps | grep 测试)
  • 服务器日志没有任何指示硬件问题的错误消息
  • 平均负载 25.0 左右(所有 3 个平均值)
  • 服务器明显对用户无响应

我最终通过重新启动 MySQLd 来“修复”问题......这没有多大意义,因为根据 mysql 的“show processlist”命令,服务器理论上是空闲的。

我应该使用哪些其他工具/指标来帮助诊断此问题并可能确定导致服务器负载运行如此之高的原因?

Aln*_*tak 7

听起来您的服务器受 IO 限制 - 因此进程处于D状态。

使用iostat看负载是磁盘上的内容。

如果 MySQL 导致大量磁盘搜索,则考虑将 MySQL 数据放在一个完全独立的物理磁盘上。如果它仍然很慢并且它是主从设置的一部分,请将复制日志也放在单独的磁盘上。

请注意,单独的分区或逻辑磁盘是不够的 - 磁头寻道时间通常是限制因素,而不是数据传输速率。

  • 另外,不要忘记,每个等待的 *thread* 都计入平均负载,除非您很好地询问,否则 ps 不会单独显示。 (3认同)