sar 和 top 显示 CPU 使用率较高,但 vmstat 和 ps 显示 CPU 使用率较低。为什么?

sar 和 top 显示 CPU 使用率较高,但 vmstat 和 ps 显示 CPU 使用率较低。为什么?

我正在诊断一个高 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 上的性能工具有多好。

真的,如果要继续提供价值,这台主机就应该升级。如果没有其他选择,就再次获得安全更新。

相关内容