cpu 使用率为 100%,但 top 没有显示任何进程使用它

cpu 使用率为 100%,但 top 没有显示任何进程使用它

首先,我忘记保存进程列表。我不得不重新启动服务器,所以我无法提供太多信息。

我有一个小型 VPS。顶部和控制面板图表中的 cpu 使用率都是 100%,并且整天都很高(我今天早上注意到网络服务器没有回复请求)。重新启动 VPS 后,CPU 回到 4% 以下(只有我使用网络服务器,所以没有任何实际负载)。

可能是什么原因?如果再次发生这种情况我该如何调查?

答案1

它可能是内核进程、驱动程序或中断中消耗的 CPU。

这不是答案,而是解决问题的一种方法。此方法的一些细节是 Linux 特定的。安装sysstatakasar软件包并修改或添加 sar-collection crontab(在 RedHat 系统上/etc/cron.d/sysstat):

* * * * * root /usr/lib64/sa/sa1 -L -F -S XALL 10 6

准备好在 的月份累积 3 GB 或更多/var/lib/sa。如果您的版本既不支持也不支持-L-F则添加以下 cron 条目:

 57 23 * * * root rm -f /var/log/sa/sa`date --date=tomorrow +\%d`

一天之后,使用sar -f /var/log/sa/saXX -CXX 为该月昨天的日期作为 0 前导的整数(即 01、02、... 10、11 ... 31)。当您发现 CPU 较高的时间窗口时,您可以检查该时间窗口的 sar 报告:

  • 中断 ( -I ALL)
  • 网络使用情况 ( -n DEV)
  • 磁盘 I/O ( -b)

假设您看到 CPU 在 10:15 和 10:18 之间跳跃。在当天 (05) 运行 sar,如下所示:

sar -f /var/log/sa/sa05 -s 10:14:00 -e 10:19:00 -I ALL -n DEV -b | less

我们在两侧各增加一分钟,以便您可以在之前/期间/之后观察,而不仅仅是期间。

如果您仍然没有看到任何内容,并且您已经查看了其他 sar 参数,并且您仍然看不到任何东西,尝试将其添加到 cron:

* * * * * { date; /bin/ps -A --sort tty,comm,pid -ww -o pgrp:8,tty:7,pid,c,pmem:5,rss:8,sz:8,size:8=TSIZE,vsz:8,nlwp,lstart,args ;} >>/var/log/procscan

这个文件会变得非常大,所以一定要轮换它或在第二天禁用 cronjob。但从这个输出中,您可能会找到罪魁祸首。

为了解决这个 cronjob 的一些问题,我创建了一个包装脚本和一组支持文件,并将它们放在 github 上。你可以找到他们这里(链接到 github 上的项目)

相关内容