首页 > 其他分享 >10分钟学习cpustat命令

10分钟学习cpustat命令

时间:2023-07-21 17:35:59浏览次数:37  
标签:10 stat pid 分钟 cpustat 进程 proc CPU

cpustat 是 Linux 下一个强大的系统性能测量程序,它用 Go 编程语言 编写。它通过使用 “用于分析任意系统的性能的方法(USE)”,以有效的方式显示 CPU 利用率和饱和度。cpustat 能用两种方式输出数据:定时汇总的纯文本列表和每个取样的彩色滚动面板。

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


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S(Free and Open-Source Software) 爱好者,一个 Linux 系统管理员、web 开发员,现在也是 TecMint 的内容创建者,他喜欢和电脑一起工作,他相信知识共享。


via: http://www.tecmint.com/cpustat-monitors-cpu-utilization-by-processes-in-linux/

作者:Aaron Kili 译者:ictlyh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

原文来自:https://linux.cn/article-8466-1.html

本文地址: https://www.linuxprobe.com/10mins-cpustat.html ‎编辑员:李帅,审核员:冯振华

本文原创地址:https://www.linuxprobe.com/10mins-cpustat.html

标签:10,stat,pid,分钟,cpustat,进程,proc,CPU
From: https://www.cnblogs.com/linuxpro/p/17572028.html

相关文章

  • oracle10g客户端连接oracle9i数据库
    oracle10g客户端连接oracle9i数据库,NetManager配置 概要文件:命名方法选择:TNSNAMES服务命名:创建-下一步到第4页,选择(oracle8或更低版本)SID,输入数据库名比如ecoradboracle9i数据库,为什么要选择这个呢,说不通啊,可事实上就是选择这个,如果不选择这个,pl/sql连接数据库的时候会报ORA-121......
  • 10个开源的前端低代码项目
    GOVIEWGoView是一个使用Vue3搭建的低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。它的技术栈为:Vue3+TypeScript4+Vite2+NaiveUI+ECharts5+Axios+Pinia2+PlopJS。Gitee:https://gitee.com/dromara/go-viewvlife企业级......
  • Windows10 下 Neo4j1.5.8 安装教程
    前言Neo4j是一个高性能的、NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的Java持久化引擎,这里就不把他和常用关系型数据库做对比了。因为篇幅有限,我这里也是第一次使用,所以以下完全是保姆级的安装教程了。 安装步骤1.打开Neo......
  • VTK9.1.0在Windows10+VS2019+Qt 5.15.2环境下编译安装以及VTK应用于QT
    下载VTK安装包在VTK官网Download|VTK中下载VTK9.1.0待编译源码,解压后在路径Documentation/dev/bulid.md中可以看到官方提供的Prerequisites以及简易教程编译环境安装按照官方提供的Prerequisites,安装以下环境:CMakeVersion3.12ornewer,however,thelatestversionisal......
  • Windows10 下 Neo4j1.5.8 安装教程
    前言Neo4j是一个高性能的、NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的Java持久化引擎,这里就不把他和常用关系型数据库做对比了。因为篇幅有限,我这里也是第一次使用,所以以下完全是保姆级的安装教程了。 安装步骤1.打开Neo4j官......
  • STM32F103 点亮LED闪烁与仿真
    今天给大家分享一下STM32流水灯简单的仿真吧,我感觉这个提供有用的,但是自己也是第一次使用,主要是感觉曲线很高级。在PWM中查看脉宽很有用。code:led.c#include"led.h"#include"delay.h"/*GPIO的控制寄存器的配置1、配置输出引脚2、打开对应的输出的寄存器的时钟3、配置引脚......
  • 求10以内的质数
    #求10以内的质数只能被自己和本身整除#2除以1是2余数是0#2除以2是1余数是0#4不是质数因为4/2等于2能被2整除#9不是质数9%3==0能被3整除list_ob=[1,]fornuminrange(2,10):flag=True#是质数吗?#先判断某个数比如4是否是质数,4需要除以整个......
  • UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 1023: unexp
     Connectedtopydevdebugger(build213.6461.77)Traceback(mostrecentcalllast): File"PyCharmCommunityEdition2021.3.1\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py",line303,in_on_run   r=r.decode('utf-8&......
  • 具有防水功能低功耗触摸IC芯片VK3710IM抗干扰触摸IC芯片
    产品型号:VK3710IM 产品品牌:永嘉微电/VINKA 封装形式:SOP-16 产品年份:新年份 原厂,工程服务,技术支持!  产品描述提供10个触摸感应按键及两线式串列界面,并有中断输出INT脚与MCU联系。提供低功耗模式,可使用于电池应用的产品,特性上对于防水和抗干扰方面有很优异的表现......
  • STM32F103内部FLASH及地址表
    在我们应用开发时,经常会有一些程序运行参数需要保存,如一些修正系数。这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能。将这类数据存在指定的位置,需要修改时直接修改存储位置的数值,需要使用时则直接读取,会是一种......