我正在诊断一个高 CPU 使用率事件,我发现来自 的数字之间存在一个奇怪的差异ps/vmstat
,显示几乎为 0%,sar/top
而 显示几乎为 100%(用户 + 系统):
sar 1 5
Linux 2.6.9-67.ELsmp (uxdfl712) 07/25/2020
01:48:31 PM CPU %user %nice %system %iowait %idle
01:48:32 PM all 43.83 0.00 56.17 0.00 0.00
01:48:33 PM all 42.68 0.00 57.32 0.00 0.00
01:48:34 PM all 42.57 0.00 57.43 0.00 0.00
01:48:35 PM all 43.18 0.00 56.82 0.00 0.00
Average: all 43.14 0.00 56.86 0.00 0.00
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
32 0 0 10493612 233320 4485160 0 0 0 14 0 1 0 0 100 0
ps -e hao %cpu | awk '{ sum += $1 } END { print sum }'
0.2
top -bn 1 |
sed '1,/PID USER PR NI %CPU/d' |
awk '{ sum += $5 } END { print sum }'
398
我在 StackExchange 和其他地方进行了很多搜索,但我只能找到有关虚拟化内容(这是一台物理机器)和 CPU 负载的参考资料,这不是我的问题。我也检查了/proc/<PID>/stat
,但没有发现任何提示。
为什么这些命令显示不同的数字?他们实际上是在查询不同的东西吗?或者可执行文件可能太旧和错误(请参阅下面的服务器数据 - 我确实对它的过时程度感到恐惧)。
谢谢!
uname -r
2.6.9-67.ELsmp
cat /etc/redhat-release
Red Hat Enterprise Linux ES release 4 (Nahant Update 6)
yum provides `which sar` | grep installed
sysstat.i386 5.0.5-16.rhel4 installed
yum provides `which vmstat` | grep installed
procps.i386 3.2.3-8.9 installed
yum provides `which ps`
<Too many providers>
ps -V
procps version 3.2.3
yum provides `which top` | grep installed
procps.i386 3.2.3-8.9 installed
grep -c processor /proc/cpuinfo
4
这是一个间歇性的、偶尔的负载。vmstat 的第一行
gives averages since the last reboot
,显然在这台主机上大部分时间都是空闲的。随后的行显示采样周期的数据,这将更接近 sar 报告的数据。0% 长时间闲置一般不好。但是 CPU 耗尽的严重程度实际上取决于系统和应用程序。
评估应用程序在此框上的执行情况。对用户请求的响应时间如何?是否及时进行批处理?如果您的绩效预期没有得到满足,那就是改进的理由。
除了硬件时代,这是较旧的软件;RHEL 4 于 8 年前进入扩展支持阶段。在现代 Linux 上,准确查找 CPU 上的内容很容易。安装调试符号,然后运行
perf top
. 任何东西都可以被详细检测。但是,我不记得 RHEL 4 上的性能工具有多好。真的,如果这台主机要继续提供价值,就应该升级。再次获得安全更新,如果没有别的。