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

在本文中,我们将介绍如何安装和使用cpustat,这是一种用于监视Linux中CPU和进程利用率的有用的系统性能测量工具。

Cpustat是使用Go编程语言编写的强大的Linux系统性能测量程序。它使用“利用饱和度和错误(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

安装过程完成后,使用sudo命令,使用root权限运行cpustat ,如果您将系统控制为非root用户,否则将显示错误信息:
$ $GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.
注意 :要运行cpustat以及您像系统中任何其他命令一样在系统上安装的所有其他Go程序,请在PATH环境变量中包含GOBIN变量。打开下面的链接,了解如何在Linux中设置PATH变量。
  1. 了解如何在Linux中永久设置$ PATH变量
这是cpustat的工作原理 查询/proc目录以获取每个间隔的当前进程ID列表 ,并且:
  • 对于每个PID,读取/ proc / pid / stat ,然后计算与之前样本的差异。
  • 如果它是一个新的PID,请阅读/ proc / pid / cmdline
  • 对于每个PID,发送一个netlink消息来获取taskstats,计算与之前样本的差异。
  • fetch / proc / stat来获取整体系统的统计信息。
再次,每个睡眠间隔被调整为考虑所有这些统计数据所消耗的时间量。此外,每个样品还记录了每次测量所需的时间与样品之间的实际经过时间。这试图解释cpustat本身的延迟。 当没有任何参数运行时, cpustat将默认显示以下内容:sampling interval:200ms,summary interval:2s(10个样本), 显示前10个进程,用户过滤器:all,pid filter:all如下面的截图所示:
$ sudo $GOBIN/cpustat 
Cpustat - 监控Linux CPU使用情况

Cpustat - 监控Linux CPU使用情况

从上面的输出中,以下是在字段之前显示的系统级摘要指标的含义:
  • usr - min / avg / max用户模式运行时间占CPU的百分比。
  • sys -min / avg / max系统模式运行时间占CPU的百分比。
  • nice -min / avg / max用户模式低优先级运行时间占CPU的百分比。
  • 空闲 - 最小/平均/最大用户模式运行时间占CPU的百分比。
  • iowait - 等待磁盘IO的最小/平均/最大延迟时间。
  • prun -min / avg / max可运行状态的进程数(与负载平均值相同)。
  • pblock - min / avg / max磁盘IO上阻塞的进程数。
  • pstart - 此汇总间隔中启动的进程/线程数。
从上面的输出来看,对于给定的进程,不同的列表示:
  • 名称 - / proc / pid / stat或/ proc / pid / cmdline中的公用进程名称。
  • pid -process id,也称为“tgid”。
  • min - pid的用户最低采样次数+系统时间,由/ proc / pid / stat测量。缩放比例是CPU的百分比。
  • 最大 - 此pid的用户+系统时间的最高采样次数,也由/ proc / pid / stat测量。
  • usr - 摘要期间pid的平均用户时间,由/ proc / pid / stat衡量。
  • 系统 - pid在总结期间的平均系统时间,由/ proc / pid / stat测量。
  • nice - 表示进程的当前“nice”值,从/ proc / pid / stat测量。更高意味着“更好”。
  • runq - 时间过程和所有的线程花费可运行,但等待运行,从taskstats通过netlink测量。缩放比例是CPU的百分比。
  • 当然 ,这个进程和所有的线程都被磁盘IO阻塞,通过netlink从taskstats测量。缩放比例是CPU的百分比,在总结间隔内平均。
  • 交换 - 通过netlink从taskstats测量的进程和所有线程花费在等待被交换的时间。缩放比例是CPU的百分比,在总结间隔内平均。
  • vcx和icx - 通过进程及其所有线程在总结间隔中的自愿上下文切换的总数,通过netlink从taskstats测量。
  • rss - 从/ proc / pid / stat提取的当前RSS值。这个进程正在使用的内存量。
  • ctime - 由/ proc / pid / stat衡量的等待在此汇总间隔期间退出的孩子所消耗的用户+ sys CPU时间。
请注意,长时间运行的子进程通常可能会混淆此测量,因为仅在子进程退出时报告时间。然而,这对于测量频繁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 Repository中查找更多信息: https//github.com/proc/products/cpustat 就这样!在本文中,我们向您展示了如何安装和使用cpustat,这是Linux的一个有用的系统性能测量工具。通过下面的评论部分与我们分享您的想法。

分享按钮