网站搜索

Cpustat - 通过在 Linux 中运行进程来监控 CPU 利用率


Cpustat是一个强大的Linux系统性能测量程序,使用Go编程语言编写。它尝试使用利用率饱和度和错误 (USE) 方法(一种分析任何系统性能的方法)以有效的方式揭示 CPU 利用率和饱和度。

它提取系统上正在执行的每个进程的较高频率样本,然后以较低频率汇总这些样本。例如,它可以每200ms测量每个进程,并每5秒总结这些样本,包括某些指标的最小/平均/最大值。

建议阅读: 20 个监控 Linux 性能的命令行工具

Cpustat 以两种可能的方式输出数据:汇总间隔的纯文本列表和每个样本的彩色滚动仪表板。

如何在 Linux 中安装 Cpustat

您的 Linux 系统上必须安装了 Go (GoLang) 才能使用 cpustat,如果您没有安装,请点击下面的链接按照 GoLang 安装步骤进行操作它安装了:

  1. 在 Linux 中安装 GoLang(Go 编程语言)

安装Go后,输入下面的go get命令进行安装,此命令将在您的GOBIN中安装cpustat二进制文件变量:

go get github.com/uber-common/cpustat

如何在 Linux 中使用 Cpustat

安装过程完成后,如果您以非 root 用户身份控制系统,请使用 sudo 命令以 root 权限运行 cpustat,如下所示,否则您将收到如下错误:

$GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.

注意:要像任何其他命令一样运行 cpustat 以及您系统上安装的所有其他 Go 程序,请包含 GOBIN PATH 环境变量中的 变量。打开下面的链接了解如何在 Linux 中设置 PATH 变量。

  1. 了解如何在 Linux 中永久设置路径变量

这就是cpustat的工作原理;查询 /proc 目录以获取每个时间间隔的当前进程 ID 列表,并且:

  • 对于每个 PID,读取 /proc/pid/stat,然后计算与先前样本的差异。
  • 如果是新的 PID,请阅读 /proc/pid/cmdline
  • 对于每个 PID,发送一条 netlink 消息来获取任务统计信息,计算与先前示例的差异。
  • 获取 /proc/stat 以获取整体系统统计信息。

同样,每个睡眠间隔都会进行调整,以考虑获取所有这些统计数据所消耗的时间。此外,每个样本还记录了根据样本之间的实际经过时间来衡量每次测量所花费的时间。这试图解释 cpustat 本身的延迟。

当不带任何参数运行时,cpustat将默认显示以下内容:采样间隔:200ms,汇总间隔:2s(10个样本),显示前10个进程,用户过滤器:全部,pid过滤器:全部为如下面的截图所示:

sudo $GOBIN/cpustat 

从上面的输出中,以下是字段之前显示的系统范围摘要指标的含义:

  • usr – 最小/平均/最大用户模式运行时间占 CPU 的百分比。
  • sys – 最小/平均/最大系统模式运行时间占 CPU 的百分比。
  • nice – 最小/平均/最大用户模式低优先级运行时间占 CPU 的百分比。
  • 空闲 – 最小/平均/最大用户模式运行时间占 CPU 的百分比。
  • iowait – 等待磁盘 IO 的最小/平均/最大延迟时间。
  • prun – 处于可运行状态的进程的最小/平均/最大数量(与平均负载相同)。
  • pblock – 磁盘 IO 上阻塞的进程的最小/平均/最大计数。
  • pstart – 在此摘要间隔内启动的进程/线程数。

仍然从上面的输出来看,对于给定的进程,不同的列意味着:

  • name – /proc/pid/stat 或 /proc/pid/cmdline 中的通用进程名称。
  • pid – 进程 ID,也称为“tgid”。
  • min – pid 的用户+系统时间的最低样本,从 /proc/pid/stat 测量。比例是 CPU 的百分比。
  • max – 此 pid 的用户+系统时间的最高样本,也是从 /proc/pid/stat 测量的。
  • usr – 总结期间 pid 的平均用户时间,从 /proc/pid/stat 测量。
  • sys – 总结期间 pid 的平均系统时间,从 /proc/pid/stat 测量。
  • nice – 表示进程当前的“nice”值,从 /proc/pid/stat 测量。更高意味着“更好”。
  • runq – 进程及其所有线程可运行但等待运行的时间,通过 netlink 从 taskstats 测量。比例是 CPU 的百分比。
  • iow – 进程及其所有线程被磁盘 IO 阻塞的时间,通过 netlink 从 taskstats 测量。比例是 CPU 的百分比,在摘要间隔内取平均值。
  • 交换 – 进程及其所有线程等待换入的时间,通过 netlink 从 taskstats 测量。比例是 CPU 的百分比,在摘要间隔内取平均值。
  • vcx 和 icx – 在摘要时间间隔内进程及其所有线程自愿上下文切换的总数,通过 netlink 从 taskstats 测量。
  • rss – 从 /proc/pid/stat 获取的当前 RSS 值。它是该进程正在使用的内存量。
  • ctime – 在此摘要间隔期间等待退出的子进程消耗的用户+系统 CPU 时间总和,从 /proc/pid/stat 测量。

请注意,长时间运行的子进程通常会混淆此测量,因为仅当子进程退出时才会报告时间。然而,这对于测量频繁的 cron 作业和运行状况检查的影响很有用,其中 CPU 时间经常被许多子进程消耗。

  • thrd – 摘要间隔结束时的线程数,从 /proc/pid/stat 测量。
  • sam – 汇总间隔中包含的此过程的样本数。最近启动或退出的进程可能对少于汇总间隔的样本可见。

以下命令显示系统上运行的前 10 个 root 用户进程:

sudo $GOBIN/cpustat -u root

要以奇特的终端模式显示输出,请使用 -t 标志,如下所示:

sudo $GOBIN/cpustat -u roo -t

要查看前 x 个进程数(默认为 10),可以使用 -n 标志,以下命令显示系统上运行的前 20 个 Linux 进程:

sudo $GOBIN/cpustat -n 20 

您还可以使用 -cpuprofile 选项将 CPU 配置文件写入文件,如下所示,然后使用 cat 命令查看该文件:

sudo $GOBIN/cpustat -cpuprofile cpuprof.txt
cat cpuprof.txt

要显示帮助信息,请使用 -h 标志,如下所示:

sudo $GOBIN/cpustat -h

从 cpustat Github 存储库查找更多信息:https://github.com/uber-common/cpustat

就这样!在本文中,我们向您展示了如何安装和使用 cpustat,这是一个有用的 Linux 系统性能测量工具。通过下面的评论部分与我们分享您的想法。