我正在诊断一个高 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
答案1
这是间歇性的、偶尔发生的负载。vmstat 的第一行gives averages since the last reboot
,显然在此主机上大部分时间处于空闲状态。后续行显示采样周期的数据,这将更接近 sar 报告的数据。
长时间处于 0% 闲置状态通常不太好。但 CPU 耗尽的严重程度实际上取决于系统和应用程序。
评估应用程序在此机器上的表现。对用户请求的响应时间如何?它是否及时进行批处理?如果没有满足您的性能预期,那么这就是改进的理由。
除了硬件年龄,这是较旧的软件;RHEL 4 在 8 年前进入了扩展支持。在现代 Linux 上,很容易找到 CPU 上的确切内容。安装调试符号,然后运行perf top
。任何东西都可以详细地检测。但是,我不记得 RHEL 4 上的性能工具有多好。
真的,如果要继续提供价值,这台主机就应该升级。如果没有其他选择,就再次获得安全更新。