进程的 CPU 百分比

进程的 CPU 百分比

查看我们服务器上的 top 输出时,我的一位同事告诉我,某些进程的“%CPU”低于 100 是因为我运行了太多进程。他补充说,根据他的经验,如果我运行的进程少于 6 个,那么所有进程的“%CPU”可能都会达到 100。

我不想给其他用户添麻烦,但我怀疑他说的是否正确。该服务器有 16 个核心,当前负载平均值在 10 到 11 之间。据我了解,它没有超载。但我不知道为什么有些进程的“%CPU”低于 100?真的是因为我吗?

感谢致敬!

以下是 top 的输出:

top - 16:34:13 up 32 days,  1:36, 12 users,  load average: 10.61, 10.39, 10.22
Tasks: 380 total,  10 running, 370 sleeping,   0 stopped,   0 zombie
Cpu(s): 55.0%us,  1.7%sy,  0.0%ni, 42.2%id,  0.5%wa,  0.1%hi,  0.4%si,  0.0%st
Mem:  130766620k total, 39859784k used, 90906836k free,   849412k buffers
Swap: 47351548k total,   279456k used, 47072092k free, 19792956k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        
17197 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4510:11 MLtest                                                                                       
28762 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4633:01 MLtest                                                                                       
29249 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4623:03 MLtest                                                                                       
29560 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4626:59 MLtest                                                                                       
 4904 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4757:12 MLtest                                                                                       
 5143 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4759:40 MLtest                                                                                       
29389 tim    18  -2 1315m 1.3g 1504 R   99  1.0   4622:11 MLtest                                                                                       
 5285 tim    18  -2 1315m 1.3g 1504 R   97  1.0   4758:49 MLtest                                                                                       
 4763 tim    18  -2 1315m 1.3g 1504 R   93  1.0   4754:22 MLtest                                                                                       
 9456 zma    18  -2  206m  85m  11m S   48  0.1  60:46.78 dropbox                                                                                         
 7527 vals   18  -2 1266m 436m  42m S    4  0.3 613:57.10 MATLAB                                                                                          
 2903 root   15  -5     0    0    0 S    1  0.0  19:00.01 rpciod/0                                                                                        
19133 vals   18  -2 1380m 503m  42m S    1  0.4 798:47.99 MATLAB                                                                                          
12454 tim    18  -2 19248 1588 1024 R    1  0.0   0:48.88 top                                                                                             
   12 root   RT  -5     0    0    0 S    1  0.0  35:01.05 migration/3                                                                                     
 2924 root   15  -5     0    0    0 S    1  0.0  27:20.92 nfsiod                                                                                          
12690 jun    18  -2  913m  84m 2684 S    1  0.1 121:55.65 MATLAB                                                                                          
19650 jun    18  -2 19244 1600 1028 S    1  0.0   6:5

答案1

我使用的经验法则是:

可接受的平均负载≤核心数+1

这确保在充分利用资源的同时,不会有多个进程在等待。无论如何加载,机器在交互使用时可能会显得反应迟钝,您可以考虑为此目的释放一些资源。

您看到的超过 6 个并发进程的 %cpu 下降可能是由许多不同的因素造成的(CPU 不是唯一的共享资源...),要知道哪些因素需要对您的程序进行一些分析。

无论如何,由于这台机器似乎是由几个用户共享用于计算目的,我强烈建议设置某种形式的作业调度,即使是用于 shell 访问(您也可以通过这种方式引入一些负载平衡)。有相当多的工具可以实现这一点,我使用的两个是扭矩/PBS太阳网格引擎(都是 OSS 项目)。

答案2

从我在您发布的输出中看到的情况来看top,我认为它mltest不能消耗比这更多的周期。它消耗了近 8 倍的 100%。我不是 CPU 架构专家,但我认为您已经达到了多核技术的极限。您的服务器每个 CPU 有多少个内核?

顺便说一句,你有一个加载您的“四核四线程机器”上是否有 10 或 11 个进程?或者您看到的是平均“%CPU”?这load是等待 CPU 周期的进程数,因此 10 相当高。

更新评论后:
感谢您重新格式化top输出并澄清有关值的问题load。我有点不同意我同事的观点 - 无论您有多少个核心,10 的负载都相当高。但您正在运行基准测试或 CPU 老化测试,不是吗?

欲了解更多答案,请参阅 ServerFault 上的交叉帖子:https://serverfault.com/questions/71510/cpu-for-a-process

相关内容