cpustat:在 Linux 下根据运行的进程监控 CPU 使用率

2023-11-14

转自:https://linux.cn/article-8466-1.html?pr

cpustat 是 Linux 下一个强大的系统性能测量程序,它用 Go 编程语言[1] 编写。它通过使用 “用于分析任意系统的性能的方法(USE)[2]”,以有效的方式显示 CPU 利用率和饱和度。

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

推荐阅读: 监控 Linux 性能的 20 个命令行工具[3]

cpustat 能用两种方式输出数据:定时汇总的纯文本列表和每个取样的彩色滚动面板。

如何在 Linux 中安装 cpustat

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

安装完 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 列表[6],然后:

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

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

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

$ sudo $GOBIN/cpustat 

cpustat – 监控 Linux CPU 使用

cpustat – 监控 Linux CPU 使用

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

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

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

  • name - 从 /proc/pid/stat 或 /proc/pid/cmdline 获取的进程名称。
  • pid - 进程 ID,也被用作 “tgid” (线程组 ID)。
  • 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。值越高表示越好(nicer)。
  • runq - 进程和它所有线程可运行但等待运行的时间,通过 netlink 取自 taskstats。比率是 CPU 的百分比。
  • iow - 进程和它所有线程被磁盘 IO 阻塞的时间,通过 netlink 取自 taskstats。比率是 CPU 的百分比,对整个汇总间隔平均。
  • swap - 进程和它所有线程等待被换入(swap in)的时间,通过 netlink 取自 taskstats。Scale 是 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

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

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

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

$ sudo $GOBIN/cpustat -u root -t

root 用户正在运行的进程

root 用户正在运行的进程

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

$ sudo $GOBIN/cpustat -n 20 

你也可以像下面这样使用 -cpuprofile 选项将 CPU 信息写到文件,然后用 cat 命令[10]查看文件:

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

要显示帮助信息,像下面这样使用 -h 选项:

$ sudo $GOBIN/cpustat -h
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cpustat:在 Linux 下根据运行的进程监控 CPU 使用率 的相关文章

  • 手机浏览器呼出QQ聊天窗口

    做一些手机html5网页的产品 难免会用到QQ聊天等 都知道电脑上面的网页是可以点击特殊的链接来打开电脑版本的QQ的 那手机呢 手机端其实也有的 手机浏览器点击超链接调出手机QQ聊天界面地址 lt a href mqqwpa im chat
  • 软件外包接单经验谈-需求篇

    上一篇谈了如何寻找客户 这一期就谈谈在和客户接洽时 如何与客户沟通需求 在这里我不去套用类似PMP里面那些完善的高大上的需求管理的方法论 因为我第一篇文章就说了 我写的这一系列文章都是针对小公司或者个人承接的外包项目 也就是都是一些中小项目
  • E5 CPU内存条数影响

    E5 v4 可支持4通道 双E5服务器8条内存即达到内存带宽 如果主板是16条 剩余的8条只增加容量 不再增加带宽 即只有在内存消耗很大 用到剩余8条内存时 内存才进行读写 写可能不完全是这样 总之 对性能的影响不大 以2697Av4为例
  • DOS网络启动盘

    DOS网络启动盘 这张从97年到现在我一直保留并维护的工具盘 也许平时用的机会不多 但总在关键时刻救急 它能帮你在无法通过光驱安装操作系统时 通过网络或USB移动盘把几百兆的Windows系统安装文件复制到本地硬盘来进行安装 当然还可以用它
  • 图解实时操作系统和非实时操作系统的区别

    转自 http blog csdn net u013752202 article details 53649047 对于实时操作系统 RTOS 和非实时操作系统 你能分别列举出来多少 实时操作系统 uCOS VxWorks RTLinux
  • UDIMM、RDIMM和LRDIMM

    UDIMM RDIMM和LRDIMM UDIMM UDIMM 全称Unbuffered DIMM 即无缓冲双列直插内存模块 指地址和控制信号不经缓冲器 无需做任何时序调整 直接到达DIMM上的DRAM芯片 UDIMM由于在CPU和内存之间没
  • OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇

    文章大部分来自 https lucent blog 原文博客地址 https blog ideaopen cn 最近火热全文的ChatGPT 被很多人玩出了花 我们在Github上可以看到几个常见的逆向SDK包 这一篇我将以学习的方式来写这
  • 内存时延效能

    时延 Latency 小张一看到这个图 不禁大叫 太复杂了 看得我都犯密集恐惧症了 看不懂 没关系 我们拆开了一个个看 1 CL CAS Latency CL是指CAS发出之后 仍要经过一定的时间才能有数据输出 从CAS与读取命令发出到第一
  • 浅谈linux性能调优之十七:进程绑定与中断绑定

    1 使用taskset设置CPU亲和性 taskset搜索并设定运行进程的CPU亲和性 根据进程ID 它还可用于启动给定CPU亲和性的进程 这样就可将指定的进程与指定的CPU或者一组CPU捆绑 CPU 亲和性使用位掩码表示 最低位对应第一个
  • MySQL 数据类型

    MySQL支持多种类型 大致可以分为三类 数值 日期 时间和字符串 字符 类型 数值类型 MySQL支持所有标准SQL数值数据类型 这些类型包括严格数值数据类型 INTEGER SMALLINT DECIMAL和NUMERIC 以及近似数值
  • 系统异常重启检测-mcelog

    mcelog 是Linux 系统上用来检查硬件错误 特别是内存和CPU错误的工具 比如服务器隔一段时间莫名的重启一次 而message和syslog又检测不到有价值的信息 通常发生MCE报错的原因有如下 1 内存报错或者ECC问题 2 处理
  • 什么是真正的实时操作系统

    转自 http club topsage com thread 513248 1 1 html 1 首先说一下实时的定义及要求 参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义 实时系统指系统的
  • TDP真的不是功耗?讲解“睿频”技术发展史

    在睿频2 0中有四个功耗限制等级 PL1 默频 可以长时间工作 此时的值就是TDP 注意红圈 PL2 可以以高于默认频率较长时间工作 有时间限制并不是无限的 PL3 偶尔可以超过的值 不过超过了会马上强制缩回 也就是功率处于跳动状态 PL4
  • iostat查看linux硬盘IO性能

    rrqm s 每秒进行 merge 的读操作数目 即 delta rmerge swrqm s 每秒进行 merge 的写操作数目 即 delta wmerge sr s 每秒完成的读 I O 设备次数 即 delta rio sw s 每
  • Mac office 2016 word 出现隐藏模块中出现编译错误: link

    try to remove Library Group Containers UBF8T346G9 Office User Content Startup Word linkCreation dotm or whatever in that
  • Ain_电脑所有乱码文字集

    以下是所有电脑上可显示的汉字 谁要是用哪个又通过输入法输不出来 可以从这里找 很简单 就是把int的 19968 至 40869 的数字按字符输出即可 19968 一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟 20000
  • 模块""可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86或x64版

    本人最近在研究mencoder 转换视频格式 发现转换rmvb需要 1 把drv43260 dll拷贝到系统的system32文件夹下 2 开始 gt 运行 gt regsvr32 drv43260 dll 来自 http topic cs
  • 最近很火的ChatGPT和GPT4

    ChatGPT 全名 Chat Generative Pre trained Transformer 美国OpenAI研发的聊天机器人程序 于2022年11月30日发布 ChatGPT是人工智能技术驱动的自然语言处理工具 它能够通过理解和学
  • cpustat:在 Linux 下根据运行的进程监控 CPU 使用率

    转自 https linux cn article 8466 1 html pr cpustat 是 Linux 下一个强大的系统性能测量程序 它用 Go 编程语言 1 编写 它通过使用 用于分析任意系统的性能的方法 USE 2 以有效的方
  • Maven搭建私有仓库(私服)

    Nexus简介 作为一个非常优秀且我找不到合适的替代品的二进制包储存库 功能也是非常强大 不单纯只能设置Maven私有仓库 包括我们常见的Yum Docker npm NuGel等等 专业版需要付费 个人用免费版就可以 专业版更加强大 专业

随机推荐