如何从 sa 命令输出确定用户使用的 CPU 百分比?

如何从 sa 命令输出确定用户使用的 CPU 百分比?

我用来sa -m显示 RHEL 7 系统上每个用户的 CPU 使用情况详细信息。它以以下格式显示信息。

oracle                              15335   88164.18re     176.77cp         0avio    167603k
root                                 9640    8294.42re      10.90cp         0avio     33737k
3rdeye                                250       0.33re       0.04cp         0avio     28358k
sshd                                    4       2.11re       0.00cp         0avio     22068k
dbus                                    2       0.00re       0.00cp         0avio      7600k
smmsp                                   2       0.00re       0.00cp         0avio     21408k

我发现这个网站提供了有关这些字段的简要信息。 (https://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html#comments

关于- 以挂钟分钟为单位的“实时” CP- 系统和用户时间的总和(以 cpu 分钟为单位) k - cpu 时间平均核心使用率,以 1k 为单位

有没有办法根据这些数据计算每个用户的 CPU 使用百分比?

更新1:

我添加此更新是因为 Alex 建议使用基于 top 命令的脚本来获取每个用户的 CPU 使用情况。我一直在使用具有该逻辑 ( ) 的脚本top -b -n 1 -u $USERNAME | awk 'NR>7 { sum += $9; } END { print sum; }'来计算用户的 CPU 使用率。但如果我仔细观察,看起来脚本并没有给你正确的值。我多少找到了一个原因。当您运行 top 时,它会显示 CPU 使用率值,然后每 3(默认)秒更新一次。但每次跑到顶部时,初始值似乎都是恒定的。

[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st

我为用户 oracle 执行了四次 top,它一直给出相同的 CPU 使用率值。当我在没有 -b 和 -n 选项的情况下运行 top 时,我可以清楚地看到它:

# top -u oracle
top - 08:47:44 up 3 days,  2:58,  2 users,  load average: 2.21, 1.69, 1.42
Tasks: 1084 total,   3 running, 1081 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st

请注意它如何从这些 CPU 使用率值开始。当然,3 秒后它会刷新并开始显示正确的值。这就是我想改变确定每个用户 CPU 使用率的方法的原因。如果我遗漏了什么,请纠正我。

答案1

我可以建议你另一种方法。这是通过包系统统计器(该链接适用于 arch),它提供了mpstat等命令iostat

mpstat 的输出:

Linux 4.9.43-1-lts (laptop)     18/08/2017  _x86_64_    (4 CPU)

19:51:50     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
19:51:50     all    2,18    0,03    0,58    0,07    0,00    0,02    0,00    0,00    0,00   97,13

iostat的输出:

Linux 4.9.43-1-lts (laptop)     18/08/2017  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2,18    0,03    0,60    0,07    0,00   97,13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               3,13        28,15        80,47    1029654    2943525

相关内容