在过去的两周内,我们的系统 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 附加到它上面,您将看到此时该进程正在发生什么。您唯一需要注意的是,此操作需要嵌入在进程中的调试信息。