cpustat是Linux下一个强大的系统性能测量程序,它是用Go编程语言编写的。它通过使用“分析任何系统性能的方法(USE)”以有效的方式显示CPU利用率和饱和度。它以高频率对系统上运行的每个进程进行采样,并以低频率聚合这些样本。例如,它能够每200毫秒测量一次每个进程,然后每5秒聚合一次这些样本,包括某些指标的最小/平均值/最大值(min/avg/max)。推荐阅读:20个用于监控Linux性能的命令行工具cpustat可以通过两种方式输出数据:定时摘要的纯文本列表和每个示例的彩色滚动面板。如何在Linux中安装cpustat为了使用cpustat,您的Linux系统中必须安装Go语言(GoLang)。如果你还没有安装,点击下面的链接一步步安装GoLang:Linux安装下安装GoLang(GoProgrammingLanguage)完成Go后,输入下面的goget命令安装cpustat,这个命令会安装cpustat二进制文件到你的GOBIN变量(指向的路径):#gogetgithub.com/uber-common/cpustat如何在Linux中使用cpustat安装过程完成后,如果你不以root用户控制系统,使用sudo命令获取root权限运行cpustat如下,否则会出现如下图的错误信息:$$GOBIN/cpustatThisprogramusesthenetlinktaskstatsinterface,soitmustberrunasroot.注意:如果你想像在你的系统中一样运行cpustat要像你安装的任何其他Go程序一样运行cpustat,你需要将GOBIN变量添加到你的PATH环境变量中。打开下面的链接,了解如何在Linux中设置PATH变量。了解如何在Linux中***设置$PATH变量以下是cpustat的工作原理:在每个时间间隔,查询/proc目录以获取当前进程ID的列表,然后:对于每个PID,读取/proc/pid/stat,然后计算与前一个样本的差异。如果是新的PID,请读取/proc/pid/cmdline。对于每个PID,发送一个netlink消息获取taskstat,并计算与上一个样本的差异。阅读/proc/stat以获得一般系统统计信息。每个休息间隔都会根据获取所有这些统计数据所需的时间进行调整。此外,每个样本还记录了测量所花费的时间,以及每个样本之间实际经过的时间。这可用于计算cpustat本身的延迟。不带任何参数运行时,cpustat默认会显示如下信息:sampleinterval:200ms;摘要间隔:2s(10个样本);显示前10个进程;用户过滤器:全部;pid过滤器:所有。如下截图所示:$sudo$GOBIN/cpustatcpustat-监控LinuxCPU使用率在上面的输出中,前面显示的系统范围的指标字段含义如下:usr-用户模式运行时的最小/平均/最大值作为CPU的百分比。sys-系统模式运行时间的最小值/平均值/最大值,以CPU百分比表示。nice-用户模式低优先级运行时的最小/平均/最大值占CPU的百分比。idle-用户模式空闲时间的最小/平均/最大值占CPU的百分比。iowait-等待磁盘IO的最小/平均/最大延迟。prun-处于可运行状态的最小/平均/最大进程数(与“平均负载”相同)。pblock-磁盘IO阻塞的最小/平均/最大进程数。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。更高的值意味着更好(更好)。runq-进程及其所有线程可运行但等待运行的时间量,通过netlink从taskstats获取。比率是CPU的百分比。iow-进程及其所有线程被磁盘IO阻塞的时间,通过netlink从taskstats获取。该比率是CPU的百分比,在整个汇总间隔内取平均值。swap-进程及其所有线程等待换入(swapin)的时间,通过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-uroot查找root用户的运行进程要以更好的终端模式显示输出,请使用-t选项,如下所示:$sudo$GOBIN/cpustat-uroot-troot用户运行进程要查看前x个进程(默认为10),可以使用-n选项,以下命令显示系统中运行的前20个进程:$sudo$GOBIN/cpustat-n20也可以使用-cpuprofile选项将CPU信息写入文件如下,然后使用cat命令查看文件:$sudo$GOBIN/cpustat-cpuprofilecpuprof.txt$catcpuprof.txt显示帮助信息,使用-h选项如下所示:$sudo$GOBIN/cpustat-h您可以从cpustatGithub存储库中找到其他信息:https://github.com/uber-common/cpustat。就是这样!在本文中,我们向您展示了如何安装和使用cpustat,这是一个有用的Linux系统性能测量工具。通过下面的评论框与我们分享您的想法。关于作者:AaronKili是Linux和F.O.S.S(自由和开源软件)爱好者、Linux系统管理员、Web开发人员,现在是TecMint内容创建者,他喜欢使用计算机工作,并且相信创意共享。
