CPU 使用率高,top 命令没有提供有用信息

CPU 使用率高,top 命令没有提供有用信息

在过去的两天里,我开始遇到一台有几个用户的服务器的问题。该服务器是一台 OpenVZ VPS。通常,当我遇到高 CPU 使用率时,我总是使用top命令来找出原因。但对于这台服务器,我没有从top命令中收到任何有用的信息。下面是我遇到的问题的示例屏幕截图 在此处输入图片描述

从屏幕截图中可以看出,%CPU所有进程的列几乎总是零,实际上大多数时候我看到所有值都是零,但 CPU 使用率却高达 10 个核心!

我完全不知所措,不知道该怎么做才能找出原因。所以我想问一下是否有人知道我遇到的可能原因?可能是服务器问题吗?

谢谢您的任何建议!

编辑:

请注意,此截图仅在高负载时拍摄。这种情况每隔几个小时发生一次,持续约 20 分钟。正常使用率仅为约 0.0-0.2 个核心。以下是正常使用率的示例。

在此处输入图片描述

进一步更新

刚才又发生了,这是建议命令的屏幕截图

在此处输入图片描述

抱歉,我对这些很陌生,但如果我理解正确的话,磁盘使用没有任何问题,io 使用率非常低。

最后更新

我尝试使用答案和评论中给出的建议方法vmstatps但找不到有用的信息。当峰值发生时,我甚至停止了 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 属性来检查。

相关内容