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