在过去的 2 天里,我开始遇到有几个用户的服务器问题。服务器是一个 OpenVZ VPS。通常当我遇到高 CPU 使用率时,我总是使用top
命令找出原因。但是对于这台服务器,我没有从top
命令中收到任何有用的信息。下面是我遇到的问题的示例屏幕截图
从截图中可以看出,%CPU
所有进程的列几乎总是为零,实际上大多数时候我看到所有值都是零,但 CPU 使用率达到了 10 个核心!
我完全迷路了,不知道该怎么做才能找出原因。所以我想问一下是否有人对我面临的可能原因有任何想法?会不会是服务器问题?
感谢您的任何建议!
编辑:
请注意,此屏幕截图仅在发生高负载时拍摄。它每隔几个小时发生一次,持续约 20 分钟。正常使用只有0.0-0.2核左右。下面是一个正常使用的例子。
进一步更新
刚才又出现了,这里是建议命令的截图
对不起,我对这些是菜鸟,但如果我理解正确,磁盘使用没有任何问题,io 使用率非常低。
最后更新
我已经尝试使用建议的方法使用vmstat
,ps
在答案和评论中给出,但找不到有用的信息。当峰值发生时,我什至停止了 apache、mysql 但它没有帮助。我终于联系了 VPS 提供商并要求更改为另一个节点。他告诉我,他知道该节点的问题,该节点最近被恶意客户严重滥用,他正在努力解决这些问题。所以我想我现在不需要做任何事情。尽管如此,我还是要感谢所有提出建议的成员,使这个问答对以后的参考有用!
大约 30% 的 CPU 时间似乎都花在了等待上,而且您的(至少 1 分钟)负载非常高。
因此,我将首先检查您的存储和存储使用模式。一个好的起点可能是查看 iostat 和/或监控任何慢速操作(写入和读取)。您还可以检查顶部每个进程所花费的时间,看看是否有什么突出的。当您运行 mysql 时,我还将检查它的运行情况。
即使您有合理数量的备用内存,您似乎也正在换出,所以我会看看调整
vm.swappiness
(使用 sysctl)可以为您做什么。RAM 比交换快,所以如果你可以使用它,我会的。其他一切都失败了,看看探测 sysrq 可以为你做什么。
如果更直观的概述可能对您有所帮助,那么如果您没有预先存在的解决方案,我可能会查看 firehol 的 netdata ( https://netdata.firehol.org/ )。
你没有描述问题是什么。如果存在性能问题,例如应用程序响应不够快,请描述它。
平均负载不是正在使用的核心数。它与 CPU 上或等待的进程数有关。当平均负载远大于核心数时,这可能表明系统对所有等待的响应速度较慢。
您正在使用基于容器的系统。主机只有一个共享内核,您正在其上运行几个进程。当主机上的其他容器工作时,您会看到负载峰值,但它不会反映在您的进程列表中。
你应该安装
atop
. 它提供更多信息。您的 CPU 用于输入/输出操作。WA - 正在等待,还有 30% 以上。我看到更有用的过程是
mysqld
. 它比其他人更消耗 CPU 时间。我建议您增加内存缓冲区并更改其他 MySQL 参数以减少磁盘操作。您可以在安装后的十个 MySQL 性能调整设置中阅读它
如果您使用虚拟机,则其他虚拟机或主机系统可能非常难以使用磁盘。您的磁盘也可能有坏扇区。
smartctl -a
通过主机服务器上的命令读取 SMART 属性来检查它。