转载

Linux pidstat命令详解

啰里啰嗦

本就想着写一下Linux性能监测这方面的文章,哪里知道写着写着都出来了。好了,为了更好的完成整个系列,索性把整个系列关联到的所有Linux命令也都重新整理一遍。

话又说回来,这些命令网上都快整理烂了,我这里再整理一遍,不是脱裤子放屁,多此一举么?这还真不是,我在整理这些Linux命令时,我都会把Google搜索出来的、百度搜索出来的相关结果的前两页都会仔细的阅读一遍,去其糟粕,取其精华;这样,我的这篇文章基本就包含了网上其它相关文章的大部分优点,同时再结合我自身的工作经验,我自认为我的这篇文章应该不会太差。

命令简介

pidstat 命令是干什么的呢?说实话,这个命令,我之前压根就没有用过的,我也不知道它有什么用。但是在我总结《Linux性能监测:IO篇》这篇文章时,其中有篇文章讲到了 pidstat 命令,好家伙,搞了这么几年,居然不知道这个命令,更不要说用了。后来Google了一下,大概了解了一下,觉的很有必要单独用一篇文章来总结一下它,所以就有了这篇文章。

废话少说,直入正题。 pidstat 是sysstat工具的一个命令,用于监控全部或指定进程的CPU、内存、线程、设备IO等系统资源的占用情况。 pidstat 首次运行时显示自系统启动开始的各项统计信息,之后运行 pidstat 将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

敲黑板了,注意重点内容, pidstat 可以监控到进程级别的信息;这就意味着我们就可以直接定位问题源头。话不多说,我们继续。

命令安装

pidstat 是sysstat工具的一个命令,如果服务器上没有现成的,不要着急。

  • 在Debian/Ubuntu系统中可以使用下面的命令来安装
    apt-get install sysstat
  • CentOS/Fedora/RHEL版本的Linux中则使用下面的命令
    yum install sysstat

命令详解

pidstat 常用命令格式如下:

pidstat [参数] [时间] [次数]

常用参数说明如下:

-u 默认的参数,显示各个进程的CPU使用统计
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息

下面就对我们常用的使用方式进行详细的总结。

使用实例

  • 命令: pidstatpidstat -u -p ALL
    说明: pidstatpidstat -u -p ALL 是等效的,默认显示所有进程的CPU使用率
    输出:
    [root@Test-Server ~]# pidstat
    Linux 3.10.0-693.2.2.el7.x86_64 (jellythink)    01/11/2019      _x86_64_        (1 CPU)
    
    11:23:19 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    11:23:19 PM     0         1    0.00    0.00    0.00    0.00     0  systemd
    11:23:19 PM     0         2    0.00    0.00    0.00    0.00     0  kthreadd
    11:23:19 PM    38       856    0.00    0.00    0.00    0.00     0  ntpd
    11:23:19 PM  1000      3120    0.00    0.00    0.00    0.00     0  php-fpm
    11:23:19 PM  1000      3121    0.00    0.00    0.00    0.00     0  php-fpm
    11:23:19 PM  1000      3122    0.00    0.00    0.00    0.00     0  php-fpm

    输出内容详解:

    UID :用户ID

    PID :进程ID

    %usr :进程在用户空间占用CPU的百分比

    %system :进程在内核空间占用CPU的百分比

    %guest :任务花费在虚拟机上的CPU使用率(运行在虚拟处理器)

    %CPU :任务总的CPU使用率

    CPU :正在运行这个任务的处理器编号

    Command :这个任务的命令名称

  • 命令: pidstat -r

    说明:输出进程内存使用情况统计

    输出:

    [root@Test-Server ~]# pidstat -r
    Linux 3.10.0-693.2.2.el7.x86_64 (jellythink)    01/12/2019      _x86_64_        (1 CPU)
    
    11:18:12 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    11:18:12 PM     0         1      0.12      0.00  125328   2068   0.11  systemd
    11:18:12 PM  1000     25079      0.00      0.00   11772      0   0.00  mysqld_safe
    11:18:12 PM  1000     25327      0.27      0.00  432104  38080   2.02  php-fpm
    11:18:12 PM  1000     25777      0.02      0.00 1051940 119704   6.36  mysqld
    11:18:12 PM     0     26437      0.00      0.00  390396   1244   0.07  php-fpm
    11:18:12 PM  1000     29976      0.26      0.00  431712  37464   1.99  php-fpm

    输出重点内容详解:

    minflt/s :从内存中加载数据时每秒出现的次要错误的数目,这些不要求从磁盘载入内存页面

    majflt/s :从内存中加载数据时每秒出现的主要错误的数目,这些要求从磁盘载入内存页面

    VSZ :虚拟地址大小,虚拟内存的使用KB

    RSS :长期内存使用,任务的不可交换物理内存的使用量KB

    %MEM :进程使用的物理内存百分比, top 命令也会输出该字段

  • 命令: pidstat -d -p 29976 1 5

    说明:每隔一秒,一共输出5次进程ID为29976的IO统计信息

    输出:

    [root@Test-Server ~]# pidstat -d -p 29976 1 5
    Linux 3.10.0-693.2.2.el7.x86_64 (jellythink)    01/12/2019      _x86_64_        (1 CPU)
    
    11:29:19 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
    11:29:20 PM  1000     29976      0.00      0.00      0.00  php-fpm
    11:29:21 PM  1000     29976      0.00      0.00      0.00  php-fpm
    11:29:22 PM  1000     29976      0.00      0.00      0.00  php-fpm
    11:29:23 PM  1000     29976      0.00      0.00      0.00  php-fpm
    11:29:24 PM  1000     29976      0.00      0.00      0.00  php-fpm
    Average:     1000     29976      0.00      0.00      0.00  php-fpm

    输出重点内容详解:

    kB_rd/s :进程每秒从磁盘读取的数据量(以kB为单位)

    kB_wr/s :进程每秒向磁盘写入的数据量(以kB为单位)

    kB_ccwr/s :任务写入磁盘被取消的速率(KB);当任务截断脏的pagecache的时候会发生。

  • 命令: pidstat -t -p 10538

    说明:显示选择任务的线程的统计信息外的额外信息

    输出:

    [root@Test-Server ~]# pidstat -t -p 10538
    Linux 3.10.0-693.2.2.el7.x86_64 (jellythink)    01/13/2019      _x86_64_        (1 CPU)
    
    12:38:04 AM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
    12:38:04 AM     0     10538         -    0.41    0.07    0.00    0.47     0  java
    12:38:04 AM     0         -     10538    0.00    0.00    0.00    0.00     0  |__java
    12:38:04 AM     0         -     10539    0.00    0.00    0.00    0.00     0  |__java
    12:38:04 AM     0         -     10540    0.00    0.00    0.00    0.01     0  |__java
    12:38:04 AM     0         -     10541    0.00    0.00    0.00    0.00     0  |__java
    12:38:04 AM     0         -     10542    0.00    0.00    0.00    0.00     0  |__java
    12:38:04 AM     0         -     10543    0.00    0.00    0.00    0.00     0  |__java
    12:38:04 AM     0         -     10544    0.00    0.00    0.00    0.00     0  |__java
    12:38:04 AM     0         -     10545    0.04    0.02    0.00    0.05     0  |__java
    12:38:04 AM     0         -     10551    0.04    0.01    0.00    0.05     0  |__java

    输出重点内容详解:

    TGID :主线程的标识

    TID :线程ID

总结

总结这些Linux命令总是无趣的,但是这些简单的命令却是我们完成一些了不起操作的基石;所以,怎么说!再无趣,也要学习吧。

失眠的晚上,完成这篇文章。

果冻想,认真玩技术的地方。

2019年1月12日,于内蒙古呼和浩特。

原文  https://www.jellythink.com/archives/444
正文到此结束
Loading...