系统 CPU 负载过高 (%sys)、系统锁定

系统 CPU 负载过高 (%sys)、系统锁定

在过去的两周内,我们的系统 CPU 使用率(显示为 %sys)出现间歇性严重峰值,持续大约半分钟,锁定大多数进程,包括 ssh。

我一直在尝试弄清楚这一点,但 atop 并未显示任何相关内容(它所显示的进程的系统使用情况微不足道),峰值是间歇性的,而且我无法使用此 Web 服务器托管的 Web 应用程序的任何工作负载来重现峰值。

如果您对如何调试高 %sys 和(有时) %si CPU 使用率有任何想法,请分享。

系统规格(不知道这些是否相关):专用服务器、CentOS 6、酷睿 i7 950、随时可用的一致 4 到 8 GB RAM,硬盘为 RAID-1。

附加信息:

  • dmesg 输出在峰值之间没有变化
  • /var/log/messages 在峰值之间没有变化
  • 这是猫/ proc / vmstat
  • 以下是输出mpstat 1在典型的峰值期间

添加 07.11.11:看起来简单的重启就恢复了系统状态,而且我们可能永远不知道到底是什么导致了这种干扰。

答案1

我知道这个帖子很老了,而且我知道你已经知道了这一点,%sys --> 如果循环花费在 %system 中,那么大部分执行都是在较低级别的代码中完成的,即可能是内核方面的问题。如果此问题再次重现,请收集以下输出:

echo t > /proc/sysrq-trigger

并检查系统消息(var/log/messages/var/log/syslog)以查看是否有任何线程可能正在使用大量系统 CPU 时间。

答案2

这听起来很愚蠢,但重启有帮助,而且我们可能永远不会知道是什么导致了峰值。

尽管如此,还是感谢您的回复。

答案3

在 centos 6.2 和 6.3 上,禁用大页面支持:

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

答案4

导致 %sys 使用率过高的因素有很多,例如登录、系统调用、上下文切换(线程和过程)、IO 甚至从内核模式到用户模式的套接字数据复制。我建议您可以使用 sar、vmstat 和 iostat 来检查这些因素。此外,最好找出峰值时导致 %sys 使用率过高的进程。在这种情况下,gdb 会很有帮助。找出进程并使用 gdb 附加到它上面,您将看到此时该进程正在发生什么。您唯一需要注意的是,此操作需要嵌入在进程中的调试信息。

相关内容