多核心服务器上只有一个CPU负载

顶部 – 01:50:56最多15天,30分钟,4个用户,平均负载:0.89,1.17,1.11任务:总计170个,运行1个,睡眠169个,停止0个,僵尸0个

Cpu0 : 56.6%us, 5.7%sy, 0.0%ni, 36.8%id, 0.0%wa, 0.0%hi, 0.9%si, 0.0%st Cpu1 : 0.9%us, 0.0%sy, 0.0%ni, 99.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 8.3%us, 0.9%sy, 0.0%ni, 90.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 1.0%us, 1.0%sy, 0.0%ni, 98.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu4 : 9.3%us, 1.2%sy, 0.0%ni, 88.4%id, 0.0%wa, 0.0%hi, 1.2%si, 0.0%st Cpu5 : 0.9%us, 0.0%sy, 0.0%ni, 99.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 3.7%us, 0.9%sy, 0.9%ni, 94.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 

Mem:总计8180768k,使用7169736k,使用1011032k,使用756132k缓冲区交换:总计2104472k,使用24k,使用2104448k,使用5849080kcaching

19033年根20 0 384m 45m 19m S 5 0.6 0:31.52 httpd
19292 quinroot 20 0 375m 35m 18m R 5 0.4 0:15.10 httpd
19474奎诺特20 0 368m 26m 16m S 5 0.3 0:04.26 httpd
19344 quinroot 20 0 373m 34m 18m S 5 0.4 0:13.30 httpd
19351 quinroot 20 0 373m 33m 18m S 5 0.4 0:12.82 httpd
19455 quinroot 20 0 369m 28m 17m S 5 0.4 0:06.20 httpd
19476 quinroot 20 0 369m 26m 15m R 5 0.3 0:04.48 httpd
19478 quinroot 20 0 368m 25m 14m S 5 0.3 0:04.40 httpd
19540喹啉20 0 367m 24m 15m S 5 0.3 0:01.28 httpd
19542 quinroot 20 0 367m 24m 15m S 5 0.3 0:01.26 httpd
19173奎诺特20 0 379米41米19米S 4 0.5 0:24.40 httpd
19290喹啉20 0 375m 34m 18m S 4 0.4 0:15.28 httpd
19349 quinroot 20 0 373m 31m 16m S 4 0.4 0:12.86 httpd
19454奎诺特20 0 369米29米17米S 4 0.4 0:06.14 httpd
19475 quinroot 20 0 368m 26m 15m S 4 0.3 0:04.10 httpd
19544 quinroot 20 0 367m 23m 14m S 4 0.3 0:01.28 httpd
19099年根20 0 380米42米20米S 3 0.5 0:25.90 httpd
19293奎诺特20 0 374m 34​​m 17m R 3 0.4 0:15.24 httpd
19537 quinroot 20 0 367m 23m 14m S 3 0.3 0:01.08 httpd
19545 quinroot 20 0 367m 23m 14m S 3 0.3 0:01.16 httpd
19526根20 0 16940 1348 948 R 1 0.0 0:00.16上
1 root 20 0 1064 392 324 S 0 0.0 0:07.62 init
2根15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd

为什么Apache总是只使用一个CPU?

看看负载平均值,我怀疑Web服务器不够忙(即提供足够的并发请求),需要大量使用多个CPU。

由于你有许多空闲的httpd进程,你可能会使用MPM prefork ,并且MinSpareServers设置为20.有很多空闲的httpd进程是正常的,当stream量到你的web服务器增加时,这些用来帮助Apache快速响应。

上面列出的瞬时CPU使用情况在某些时候不是长期使用的指示(例如,它可能是一个不幸的例子)。 不过,至于为什么CPU#0可能会受到青睐:

  • 具有较低PID的Apache MPM prework worker进程倾向于做更多的工作( 如此评论所证实 )。 例如,您用最高的TIME列出的两个进程具有最低的进程ID(19033年,19099年)。
  • Linux有利于在同一CPU上保留进程(对于高速caching性能):请参阅man taskset(“请注意,Linux调度程序也支持自然的CPU关联性:调度程序会尝试将进程保持在同一CPU上, “)。 由于select一个随机CPU是次优的(考虑用电量),重复使用CPU#0似乎是合理的。

所以我想说你的networking服务器主要是由几个进程提供服务的,而Linux出于性能的考虑,倾向于在同一个CPU上运行它们。

如果您想了解更多有关Apache进程的信息,请启用ExtendedStatus指令(取消注释httpd.conf中的相应部分):这将启用一个状态网页,其中显示了进程列表以及它们当前正在提供的内容。

希望这可以帮助! 🙂

Lockie