Top c - CPU 使用率 >200% 会崩溃吗?

Top c - CPU 使用率 >200% 会崩溃吗?

我希望根据您的经验提供一些建议。我主要担心的是我真的不想导致计算机服务器崩溃。

问题是,我正在 Linux 计算机服务器(超级计算机?也许吧。)上运行一个程序。我正在运行的程序能够指定可以使用的线程。我指定我想使用 15 个线程。

我使用的计算机服务器大约有20多个处理器(6核Intel Xeon CPU)。从 top c 中,我看到运行我正在使用的程序

%CPU
190.7%

所以我继续检查 top c (1) ,下面是输出

Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 95.7%us,  0.3%sy,  0.0%ni,  0.0%id,  3.6%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu8  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu9  :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu10 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu11 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu12 : 96.0%us,  0.7%sy,  0.0%ni,  0.0%id,  3.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu13 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu14 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu15 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu16 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu17 :  0.0%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu18 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu19 :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu20 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

CPU 使用百分比在不同 CPU 之间变化,例如有时 cpu20 达到 90%,而 cpu1 回到 0%。

是否有可能因为我使用 190% 的 CPU 而导致计算机服务器崩溃?

答案1

不同的工具、不同的系统对 cpu 百分比的报告方式不同。考虑 cpu 负载的更好方法是使用负载。考虑以下超载的工作机器:

# w 
 02:22:31 up 221 days, 11:06,  1 user,  load average: 9.87, 9.50, 7.25
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
stephan  pts/0    173.13.169.18    02:22    0.00s  0.44s  0.00s w


~$ cat /proc/cpuinfo |grep processor
processor   : 0
processor   : 1

这表示我的 1 分钟负载为 9.87,5 分钟负载为 9.50,15 分钟负载为 7.25。 “load”数字代表这台机器已分配了多少个处理器来完成工作,而 cpuinfo 命令则显示了我需要多少个实际处理器来完成这项工作。如果我有 12 个 cpu,这个负载水平就完全没问题了。

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                
11579 app       20   0  263m  97m 4104 R   22  1.3   0:00.85 ruby                                                                                   
11586 app       20   0     0    0    0 Z   20  0.0   0:00.62 ruby <defunct>                                                                         
11589 app       20   0  262m  96m 3884 S   18  1.3   0:00.53 ruby                                                                                   
11592 app       20   0  260m  95m 3000 R   17  1.3   0:00.50 ruby                                                                                   
11600 app       20   0  260m  95m 2744 R   15  1.3   0:00.45 ruby                                                                                   
11595 app       20   0  260m  95m 2744 R   13  1.3   0:00.39 ruby                                                                                   
11598 app       20   0  262m  95m 3096 R   12  1.3   0:00.35 ruby                                                                                   
11604 app       20   0  258m  93m 2744 R   10  1.3   0:00.30 ruby                                                                                   
11607 app       20   0  257m  92m 2496 R    8  1.2   0:00.25 ruby                                                                                   
11610 app       20   0  256m  91m 2560 S    4  1.2   0:00.11 ruby

所以你可以看到 cpu 在进程之间分配,但我关心的是,有更多的工作超出了 cpu 的实际承受能力。这导致排队作业必须等待 cpu 空闲才能使用它们。

答案2

%CPU 是针对 1 个 CPU 进行测量的,因此 200% 表示 2 个 CPU 全职工作。一切都取决于您拥有多少个 CPU(核心、线程)。如果您使用的资源远远超过可用资源的 70% 左右,那么您就有麻烦了。但CPU并不是唯一的衡量标准,I/O也很重要。如果您担心的话,请安装sysstat( sar)、配置它并了解其输出。

相关内容