三个服务器进程消耗的双核 CPU 不超过 50%

三个服务器进程消耗的双核 CPU 不超过 50%

我在 Intel Core 2 Duo CPU 上运行了三个进程。通过观察“top”的输出和 CPU 负载图(由 MRTG 绘制,通过 SNMP 收集数据),我可以看到 CPU 负载从未超过 50%,而且,在一天中的大部分时间里,当这些进程繁忙时,CPU 负载的上限为 50%。我的意思是,CPU 负载在早上增长到 50%,并一直保持到深夜。

我的第一个想法是只有一个核心被 100% 使用,因此两个 CPU 各占 50%。但是,由于进程正在运行,从“top”中我可以看到两个核心都在加载,所以情况并非如此。schedtool 显示这三个进程的 CPU 亲和力默认为 0x03,允许它们使用两个核心。如果我强制一个进程使用一个核心(schedtool -a 0x01),另外两个进程使用第二个核心(schedtool -a 0x02),累计使用率将超过 50%。

为什么三个进程似乎只占用了两个核心的 50%?为什么强制它们使用不同的 CPU 会导致使用率更高?有什么提示吗?

有问题的 PS 进程是反恐精英服务器。

答案1

有了 CPU 亲和力,操作系统可能会避免一些上下文切换,从而导致更高的 CPU 使用率。除非您有一些较高的网络或磁盘 IO,否则我怀疑这种收益不会很大。

此外,top 会汇总多个核心的数据,我曾见过奇怪的舍入/数学错误。在 top 中,尝试查看每个核心(在 top 中点击 1)。这将让您更好地了解每个 CPU 的使用情况。

来自男人

自上次屏幕更新以来,任务所占的 CPU 时间份额,以占总 CPU 时间的百分比表示。在真正的 SMP 环境中,如果“Irix 模式”关闭,top 将以“Solaris 模式”运行,其中任务的 CPU 使用率将除以 CPU 总数。您可以使用“I”交互命令切换“Irix/Solaris”模式。

可能需要使用 sysstat 来查看更多详细的 CPU 指标。mpstat 命令将在这里为您提供帮助:

mpstat -P ALL 
01:06:12 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
01:06:12 PM  all    0.06    0.00    0.02    1.84    0.00    0.00    0.03   98.05     96.39
01:06:12 PM    0    0.06    0.00    0.02    1.84    0.00    0.00    0.02   98.05     50.98
01:06:12 PM    1    0.58    0.00    0.67    1.81    0.00    0.00    4.10   92.85     50.98
01:06:12 PM    2    0.35    0.00    0.73    1.85    0.00    0.00    4.10   92.98     50.98
01:06:12 PM    3    0.12    0.00    0.38    1.06    0.00    0.00    4.09   94.35     50.98

将吐出所有核心。

相关内容