我正在用 Bash 编程,想找出上一秒使用了多少 CPU 时间。我还需要分离系统时间(内核模式)和用户时间(用户模式)。
我已经调查过顶部但是我是 UNIX/Terminal 的新手,所以我无法从那里得到一些东西。
感谢您的帮助。
答案1
您可以使用该vmstat(8)
实用程序。默认情况下,Linux 系统通常不安装该实用程序,因此如果您的系统缺少该实用程序,则需要使用系统的包管理器进行安装。
在 Fedora Core 中,它是软件包的一部分sysstat
。
示例输出:
$ vmstat 1 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 752 136480 31204 392176 0 0 2 1 40 101 0 0 99 0
0 0 752 138268 31344 392416 0 0 0 0 59 205 0 1 99 0
第一行是重启以来的平均值,第二行是最后一秒的采样。
您想要 CPU 统计信息,显然,各列的含义是(来自手册页):
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
您可以使用awk(1)
来获取值,例如:
vmstat=$(vmstat 1 2 | tail -1)
# Kernel time
sys=$(echo "$vmstat" | awk '{print $14}')
# User time
sys=$(echo "$vmstat" | awk '{print $13}')
相关问题:如何获取 Linux 上的整体 CPU 使用率(例如 57%)[关闭]
这应该适用于 Linux、FreeBSD 以及 MacOSX。