Linux 上系统 CPU 使用率高

Linux 上系统 CPU 使用率高

我们遇到了一个不寻常的问题,我们的一些 Linux 服务器进入了 CPU 利用率非常高的状态,当我们深入研究时,发现大部分 CPU 利用率都在内核空间中。%sys 利用率约为 80%。到目前为止,我们还没有找到任何具体的调试方法,任何帮助都将不胜感激。

“perf top” 显示 native_queued_spin_lock_slowpath 是主要罪魁祸首(90%)。

下面是 sar 的简短快照。 在此处输入图片描述

答案1

您很可能超出了硬件的工作能力。有太多 CPU 同时尝试排队和处理工作 - 超出了物理硬件的实际能力。

您的多线程软件正在花时间等待……自己。这些共享资源可能是共享内存、共享服务器,甚至是磁盘。

Native_queued_spin_lock_slowpath自旋锁。这样的锁应该只是短暂地、偶尔地“旋转”,但您的锁却旋转了很多次。花在“旋转”上的 CPU 时间是 100% 浪费的时间。

您只需要分配足够的 CPU 来处理任务即可。如果分配更多的 CPU 来执行任务,导致它们只是相互等待,那么您将一事无成,尤其是考虑到它们在自旋锁中浪费了 CPU 时间,而它们本应该做一些有用的事情。

您应该减少使用的 CPU 数量。如果您确实需要这样的性能,您可以使用“亲和性”规则在 CPU 之间分配计算资源。

另请参阅帖子 为什么拥有更多更快的内核反而会使我的多线程软件变得更慢?

相关内容