我希望根据您的经验提供一些建议。我主要担心的是我真的不想导致计算机服务器崩溃。
问题是,我正在 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
)、配置它并了解其输出。