详解Linux下cpustat的安装和使用方法

cpustat 是 Linux下用Go编写的系统性能测量程序,它通过使用 “用于分析任意系统的性能的方法(USE)”,以有效的方式显示 CPU 利用率和饱和度,本篇文章重点为大家讲解一下Linux下cpustat的安装和使用方法,有需要的小伙伴可以参考一下。

它高频率对系统中运行的每个进程进行取样,然后以较低的频率汇总这些样本。例如,它能够每 200ms 测量一次每个进程,然后每 5 秒汇总这些样本,包括某些度量的最小/平均/最大值(min/avg/max)。

如何在 Linux 中安装 cpustat

为了使用 cpustat,你的 Linux 系统中必须安装有 Go 语言(GoLang),如果你还没有安装它,点击下面的链接逐步安装 GoLang:

  • 在 Linux 下安装 GoLang(Go 编程语言)

安装完 Go 以后,输入下面的 go get 命令安装 cpustat,这个命令会将 cpustat 二进制文件安装到你的 GOBIN 变量(所指的路径):

# 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.

注意:想要像你系统中已经安装的其它 Go 程序那样运行 cpustat,你需要把 GOBIN 变量添加到 PATH 环境变量。打开下面的链接学习如何在 Linux 中设置 PATH 变量。

cpustat 是这样工作的:在每个时间间隔查询 /proc 目录获取当前进程 ID 列表,然后:

  1. 对于每个 PID,读取 /proc/pid/stat,然后计算和前一个样本的差别。
  2. 如果是一个新的 PID,读取 /proc/pid/cmdline。
  3. 对于每个 PID,发送 netlink 消息获取 taskstat,计算和前一个样本的差别。
  4. 读取 /proc/stat 获取总的系统统计信息。

根据获取所有这些统计信息所花费的时间,会调整每个休息间隔。另外,通过每次取样之间实际经过的时间,每个样本也会记录它用于测量的时间。这可用于计算 cpustat 自身的延迟。

当不带任何参数运行时,cpustat 默认会显示以下信息:样本间隔:200ms;汇总间隔:2s(10 个样本);显示前 10 个进程;用户过滤器:all;pid 过滤器:all。正如下面截图所示:

$ sudo $GOBIN/cpustat

10分钟学习cpustat命令10分钟学习cpustat命令

cpustat – 监控 Linux CPU 使用

在上面的输出中,之前显示的系统范围的度量字段意义如下:

  1. usr – 用户模式运行时间占 CPU 百分比的 min/avg/max 值。
  2. sys – 系统模式运行时间占 CPU 百分比的 min/avg/max 值。
  3. nice – 用户模式低优先级运行时间占 CPU 百分比的 min/avg/max 值。
  4. idle – 用户模式空闲时间占 CPU 百分比的 min/avg/max 值。
  5. iowait – 等待磁盘 IO 的 min/avg/max 延迟时间。
  6. prun – 处于可运行状态的 min/avg/max 进程数量(同“平均负载”一样)。
  7. pblock – 被磁盘 IO 阻塞的 min/avg/max 进程数量。
  8. pstat – 在本次汇总间隔里启动的进程/线程数目。

同样还是上面的输出,对于一个进程,不同列的意思分别是:

  1. name – 从 /proc/pid/stat 或 /proc/pid/cmdline 获取的进程名称。
  2. pid – 进程 ID,也被用作 “tgid” (线程组 ID)。
  3. min – 该 pid 的用户模式+系统模式时间的最小样本,取自 /proc/pid/stat。比率是 CPU 的百分比。
  4. max – 该 pid 的用户模式+系统模式时间的最大样本,取自 /proc/pid/stat。
  5. usr – 在汇总期间该 pid 的平均用户模式运行时间,取自 /proc/pid/stat。
  6. sys – 在汇总期间该 pid 的平均系统模式运行时间,取自 /proc/pid/stat。
  7. nice – 表示该进程的当前 “nice” 值,取自 /proc/pid/stat。值越高表示越好(nicer)。
  8. runq – 进程和它所有线程可运行但等待运行的时间,通过 netlink 取自 taskstats。比率是 CPU 的百分比。
  9. iow – 进程和它所有线程被磁盘 IO 阻塞的时间,通过 netlink 取自 taskstats。比率是 CPU 的百分比,对整个汇总间隔平均。
  10. swap – 进程和它所有线程等待被换入(swap in)的时间,通过 netlink 取自 taskstats。Scale 是 CPU 的百分比,对整个汇总间隔平均。
  11. vcx 和 icx – 在汇总间隔期间进程和它的所有线程自动上下文切换总的次数,通过 netlink 取自 taskstats。
  12. rss – 从 /proc/pid/stat 获取的当前 RSS 值。它是指该进程正在使用的内存数量。
  13. ctime – 在汇总间隔期间等待子进程退出的用户模式+系统模式 CPU 时间总和,取自 /proc/pid/stat。 注意长时间运行的子进程可能导致混淆这个值,因为只有在子进程退出后才会报告时间。但是,这对于计算高频 cron 任务以及 CPU 时间经常被多个子进程使用的健康检查非常有帮助。
  14. thrd – 汇总间隔最后线程的数目,取自 /proc/pid/stat。
  15. sam – 在这个汇总间隔期间该进程的样本数目。最近启动或退出的进程可能看起来比汇总间隔的样本数目少。

下面的命令显示了系统中运行的前 10 个 root 用户进程:

$ sudo $GOBIN/cpustat -u root

10分钟学习cpustat命令10分钟学习cpustat命令

查找 root 用户正在运行的进程

要想用更好看的终端模式显示输出,像下面这样用 -t 选项:

$ sudo $GOBIN/cpustat -u root -t

10分钟学习cpustat命令10分钟学习cpustat命令

root 用户正在运行的进程

要查看前 x 个进程(默认是 10),你可以使用 -n 选项,下面的命令显示了系统中 正在运行的前 20 个进程:

$ 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 下的一个有用的系统性能测量工具。通过下面的评论框和我们分享你的想法吧。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/7473.html

(0)
晴川运维晴川运维
上一篇 2025年6月9日
下一篇 2025年6月9日

相关推荐

  • Github中开源安全工具大全

    本仓库收集的初衷是为向各类企业安全从业人员提供在企业信息安全防护体系建设过程中可以参考的开源安全扫描工具,以期望企业能够利用这些扫描器对自身业务进行自检,从而提高自身业务安全性。 …

    Linux系统 2025年6月8日
  • Linux中nmcli命令使用方法

    nmcli命令是redhat7或者centos7之后的命令,该命令可以完成网卡上所有的配置工作,并且可以写入配置文件,永久生效,下面为大家讲解一下nmcli命令使用方法。 基本用法…

    Linux系统 2025年6月8日
  • 详解Redis集群快捷迁移工具:Redis-migrate-tool

    Redis-Migrate-Tool(都简称RMT),是唯品会开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写…

    Linux系统 2025年6月18日
  • Linux中设置全局变量

    Linux 中环境变量,包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量;用户级的环境变量则是该用户使用系统时加载的环境变量,下面为大家详细讲解一下Li…

    Linux系统 2025年6月8日
  • SSH连接调试小技巧

    本篇文章重点为大家讲解一下SSH连接调试小技巧,有需要的小伙伴可以参考一下。 问题一:SSH服务没有运行 SSH连接错误的常见原因是服务未在远程服务器上运行。这可能是由于服务意外关…

    Linux系统 2025年6月9日
  • 详解Bash提取子字符串具体方法

    所谓“子字符串”就是出现在其它字符串内的字符串。 比如 “3382” 就是 “this is a 3382 test” 的子字符串。 我们有多种方法可以从中把数字或指定部分字符串抽…

    Linux系统 2025年10月21日
  • Linux 最小化安装中设置互联网具体方法

    在最小化服务器安装中,设置互联网或网络是非常容易的。在本指南中,我们将解释如何在 CentOS、RHEL、Rocky Linux 最小安装中设置互联网或网络。 在最小化服务器安装中…

    Linux系统 2025年10月25日
  • 讲解一下ES6 Promise用法

    所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。…

    Linux系统 2025年6月13日
  • Mariadb中聚合函数和分组函数具体使用方法

    聚合函数能对集合中的一组数据进行计算,并返回单个计算结果,分组函数通过一定的规则将一个数据集划分为若干个小的区域,然后针对若干个小区域进行统计汇总,般用于对查询结果分组统计,常与聚…

    Linux系统 2025年6月13日
  • Linux grep基础入门

    grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予…

    Linux系统 2025年6月13日

发表回复

登录后才能评论