Linux 上查看进程使用CPU内存磁盘网络的详细情况

 


## 安装 iostat/mpstat/sar/pidstat
yum install sysstat -y



#########
## CPU ##
#########

## mpstat命令指令主要用于多CPU环境下,它显示各个可用CPU的状态。
## 这些信息存放在/proc/stat文件中。
## 在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
mpstat [-P {cpu|ALL}] [internal [count]]

    ## 查看全部CPU及汇总
    mpstat -P ALL
        Linux 3.10.0-1160.6.1.el7.x86_64 (localhost.localdomain) 	2020年12月07日 	_x86_64_	(4 CPU)
        
        13时25分52秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
        13时25分52秒  all    0.08    0.00    0.20    0.25    0.00    0.03    0.00    0.34    0.00   99.11
        13时25分52秒    0    0.07    0.00    0.14    0.21    0.00    0.00    0.00    0.18    0.00   99.39
        13时25分52秒    1    0.07    0.00    0.32    0.71    0.00    0.00    0.00    0.65    0.00   98.26
        13时25分52秒    2    0.07    0.00    0.18    0.03    0.00    0.00    0.00    0.30    0.00   99.42
        13时25分52秒    3    0.10    0.00    0.16    0.05    0.00    0.10    0.00    0.24    0.00   99.36
    
    ## 查看指定CPU
    mpstat -P 0,1
        Linux 3.10.0-1160.6.1.el7.x86_64 (localhost.localdomain) 	2020年12月07日 	_x86_64_	(4 CPU)
        
        13时26分22秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
        13时26分22秒    0    0.07    0.00    0.14    0.21    0.00    0.00    0.00    0.18    0.00   99.39
        13时26分22秒    1    0.07    0.00    0.32    0.71    0.00    0.00    0.00    0.65    0.00   98.26

    ## 间隔1秒,执行2次
    mpstat 1 2
        Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 	2019年12月17日 	_x86_64_	(1 CPU)
        16时15分04秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
        16时15分05秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
        16时15分06秒  all    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
        平均时间:  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.50

    ## 指标说明                                                                                     从/proc/stat获得数据
        CPU     处理器ID
        %user   在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程                        (usr/total)*100
        %nice   在internal时间段里,nice值为负进程的CPU时间(%)                                      (nice/total)*100
        %sys    在internal时间段里,内核时间(%)                                                     (system/total)*100
        %iowait 在internal时间段里,硬盘IO等待时间(%)                                               (iowait/total)*100
        %irq    在internal时间段里,硬中断时间(%)                                                   (irq/total)*100
        %soft   在internal时间段里,软中断时间(%)                                                   (softirq/total)*100
        %idle   在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)    (idle/total)*100

    ## 当软中断耗时占比很高时继续排查是什么造成的
    ## 需要对比两次查询结果,看增长最快的项目
    cat /proc/softirqs
                        CPU0       CPU1       CPU2       CPU3       
              HI:      83030        130         12        484
           TIMER:     640814     349397     699532    6417126
          NET_TX:          1       6634          1      58878   # 网络发送数据造成中断数
          NET_RX:         45         54          0   13407550   # 网络接收数据造成中断数
           BLOCK:       4557     258850        731        545
    BLOCK_IOPOLL:          0          0          0          0
         TASKLET:      35536        113     178493      56688
           SCHED:     506047     185132     533578    2262479
         HRTIMER:          0          0          0          0
             RCU:     283809     155003     243688    2908468
    如中断主要集中在1个核心上,其他核心很空闲,可以考虑修改配置让其他几个核心参与分担



##########
## 磁盘 ##
##########

iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
    ## -x 详细
    ## -m MB

    iostat -x
        Linux 3.10.0-1062.el7.x86_64 (localhost.localdomain) 	2019年12月17日 	_x86_64_	(1 CPU)
        avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                0.02    0.00    0.01    0.00    0.00   99.97
        Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
        vda               0.00     0.00    0.01    0.03     1.05     1.39   145.29     0.00   59.71    4.37   72.75   0.47   0.00
        dm-0              0.00     0.00    0.01    0.02     1.04     1.38   158.04     0.00   68.48    5.95   83.02   9.05   0.03
        dm-1              0.00     0.00    0.00    0.00     0.00     0.00    10.84     0.00  520.22    0.11  560.20   3.23   0.00
        
        # 说明
        rrqm/s      # 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并(当系统调用需要读取数据的 时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)
        wrqm/s      # 每秒对该设备的写请求被合并次数
        r/s         # 每秒完成的读次数
        w/s         # 每秒完成的写次数
        rkB/s       # 每秒读数据量(kB为单位)
        wkB/s       # 每秒写数据量(kB为单位)
        avgrq-sz    # 平均每次IO操作的数据量(扇区数为单位)
        avgqu-sz    # 平均等待处理的IO请求队列长度
        await       # 平均每次IO请求等待时间(包括等待时间和处理时间,单位:毫秒)【一般系统IO响应时间应该低于5ms,如果大于10ms就比较大了】
        r_await     # 读
        w_await     # 写
        svctm       # 平均每次IO请求的处理时间(毫秒为单位)
        %util       # 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率



##########
## 内存 ##
##########

## 查看具体进程对内存的使用情况
pidstat -l -r -p 9878 1 2
    10时57分52秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    10时57分53秒    27      9878      0.00      0.00 6818380 5521736  71.43  /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid 
    10时57分54秒    27      9878      0.00      0.00 6818380 5521736  71.43  /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

pidstat -r -p 18442 1 2
    10时54分46秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    10时54分47秒     0     18442      0.00      0.00  115544   2104   0.03  bash
    10时54分48秒     0     18442      0.00      0.00  115544   2104   0.03  bash

    Minflt/s    # 任务每秒发生的次要错误,不需要从磁盘中加载页
    Majflt/s    # 任务每秒发生的主要错误,需要从磁盘中加载页
    VSZ         # 虚拟地址大小,虚拟内存的使用KB
    RSS         # 常驻集合大小,非交换区内存使用KB
    %MEM        # 进程占用总内存的百分比


##########
## SWAP ##
##########

sar -W 1 2

    09时30分51秒  pswpin/s pswpout/s
    09时30分52秒      0.00      0.00
    09时30分53秒      0.00      0.00
    平均时间:      0.00      0.00
    
    # 说明
    pswpin/s  # 每秒从交换分区到系统的交换页面(swap page)的数量
    pswpott/s # 每秒从系统交换到swap的交换页面(swap page)的数量



##########
## 网络 ##
##########

sar [ 选项 ] [ <时间间隔> [ <次数> ] ]

    ## 查看全部网卡进出正常信息
    sar -n DEV 1
    
        16时49分45秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
        16时49分46秒      eth0      4.00      2.00      0.48      0.32      0.00      0.00      0.00
        16时49分46秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
        
        IFACE      # 网络设备名
        rxpck/s    # 每秒接收的包总数
        txpck/s    # 每秒传输的包总数
        rxKB/S     # 每秒钟接受的数据包大小,单位为KB(12000.00(rxkB/s) = 12MB/秒 (百兆网络极限))
        txKB/S     # 每秒钟发送的数据包大小,单位为KB
        rxcmp/s    # 每秒接收压缩包的总数
        txcmp/s    # 每秒传输压缩包的总数
        rxmcst/s   # 每秒接收的多播(multicast)包的总数
    
    ## 查看全部网卡进出错误信息
    sar -n EDEV 1
    
        09时37分18秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
        09时37分19秒    wlp3s0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
        09时37分19秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
        09时37分19秒    enp2s0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
        IFACE      # 网卡名称
        rxerr/s    # 每秒钟接收到的损坏的数据包
        txerr/s    # 每秒钟发送的数据包错误数
        coll/s     # 当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
        rxdrop/s   # 当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
        txdrop/s   # 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
        txcarr/s   # 当发送数据包的时候,每秒钟载波错误发生的次数
        rxfram     # 在接收数据包的时候,每秒钟发生的帧对其错误的次数
        rxfifo     # 在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
        txfifo     # 在发生数据包的时候,每秒钟缓冲区溢出的错误发生的次数



##########
## 进程 ##
##########

pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

    参数:
    -u:默认的参数,显示各个进程的cpu使用统计
    -r:显示各个进程的内存使用统计
    -d:显示各个进程的IO使用情况
    -p:指定进程号
    -w:显示每个进程的上下文切换情况
    -t:显示选择任务的线程的统计信息外的额外信息
    -T { TASK | CHILD | ALL }
        TASK    独立的task,
        CHILD   进程下所有线程统计信息。
        ALL     独立的task和task下面的所有线程。
        # 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
    -h:在一行上显示了所有活动,这样其他程序可以容易解析。
    -I:在SMP环境,表示任务的CPU使用率/内核数量
    -l:显示命令名和所有参数

    示例
    # 在一行内显示进程号为 4766 的cpu、内存、磁盘使用情况,没秒1次,共3次
    pidstat -d -t -r -u -h -p 4766 1 3
    结果示例:(加子线程会变多行)
        #      Time   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  minflt/s  majflt/s     VSZ    RSS   %MEM   kB_rd/s   kB_wr/s kB_ccwr/s  Command
         1607155938     0      4766         0    0.00    0.00    0.00    0.00     0      0.00      0.00  136100   2132   0.21      0.00      0.00      0.00  mysql
         1607155938     0         0      4766    0.00    0.00    0.00    0.00     0      0.00      0.00  136100   2132   0.21      0.00      0.00      0.00  |__mysql
        剩余2次略
    
    ## -u/-t
    PID         # 进程ID
    %usr        # 进程在用户空间占用cpu的百分比
    %system     # 进程在内核空间占用cpu的百分比
    %guest      # 进程在虚拟机占用cpu的百分比
    %CPU        # 进程占用cpu的百分比
    CPU         # 处理进程的cpu编号(CPU核心)
    Command     # 当前进程对应的命令
    
    ## -r
    Minflt/s    # 任务每秒发生的次要错误,不需要从磁盘中加载页
    Majflt/s    # 任务每秒发生的主要错误,需要从磁盘中加载页
    VSZ         # 虚拟地址大小,虚拟内存的使用KB
    RSS         # 常驻集合大小,非交换区内存使用KB

    ## -d
    kB_rd/s     # 每秒从磁盘读取的KB
    kB_wr/s     # 每秒写入磁盘KB
    kB_ccwr/s   # 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生
    
    ## -w
    Cswch/s     # 每秒主动任务上下文切换数量
    Nvcswch/s   # 每秒被动任务上下文切换数量

    ## -T ALL -p
    Usr-ms      # 任务和子线程在用户级别使用的毫秒数
    System-ms   # 任务和子线程在系统级别使用的毫秒数
    Guest-ms    # 任务和子线程在虚拟机(running a virtual processor)使用的毫秒数



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值