Linux性能监控命令_pidstat & 统计进程信息

描述

    pidstat 用于监控正在运行的进程的详细信息,包括进程的 CPU 使用量、内存使用量、I/O 情况和上下文切换次数等。这个命令一般用于配合其他命令一起使用,比如使用 iostat 发现了磁盘瓶颈,那么就需要使用 pidstat 来找到这个进程。

注意

  1. 首次运行时显示自系统启动开始的各项统计信息。
  2. 普通用户无法监控其他用户进程,需要使用root用户监控。

        

文章目录如下

1. 语法

1.1. 常用参数

2. 实时监控

2.1. 正在使用CPU的进程

2.2. 正在使用内存的进程

2.3. 正在使用磁盘的进程

2.4. 指定监控pid

3. 自动化监控

4. 总结


        

1. 语法

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

        

1.1. 常用参数

-u:监控CPU
-w:监控上下文切换
-r:监控内存
-h:以人类可读的格式显示输出的单位(例如,K、M、G)
-d:监控I/O统计信息
-t:显示详细信息,也可以指定pidstat必须监视的内容 {task | child | all}
-p:指定PID {pid[,…]| self | all}
-C:指定命令名称包含字符串comm的任务

        

2. 实时监控

2.1. 正在使用CPU的进程

pidstat -u 1    #只显示占用CPU的进程

当使用其他命令发现空闲 cpu 已经用完了(idle 为0)

这时可以通过 pidstat 来查询正在使用 cpu 的进程

pidstat -u 1

PID    :某个进程的PID
%usr   :用户空间使用的cpu%
%system:内核空间使用的cpu%
%guest :管理程序(hypervisor)为另一个虚拟进程提供服务而等待的虚拟CPU占比
%CPU   :整体CPU的使用率
CPU    :CPU的编号    #例如总cpu只有4核,那么对应每个CPU的编号为 0,1,2,3
Command:进程的命令名称

         

还能查看进程的上下文切换情况

pidstat -w 1

UID      :进程所有者的用户 ID(User ID)。
PID      :进程的 ID 号。
cswch/s  :平均每秒钟发生的上下文切换次数。
nvcswch/s:平均每秒钟发生的进程放弃 CPU 控制权的次数(进程主动放弃 CPU 控制权所引起的上下文切换)
Command  :进程的命令名称。

上下文切换(Context Switches)是操作系统内核在切换进程或线程之前需要执行的一些操作,例如保存进程当前的上下文(如进程状态、寄存器等),从进程 A 切换到进程 B 时就需要进行两个上下文的切换。因此,上下文切换的次数可以反映出当前系统中进程的切换频繁度,同时也可以作为查找性能问题的关键指标之一。

        

2.2. 正在使用内存的进程

pidstat -r 1    #只显示占用内存的进程

如果使用其他命令发现内存不足

这时也可以使用 pidstat 查看占用内存的进程

pidstat -r 1

PID     :进程的PID
minflt/s:每秒发生的小故障总数      #即不需要从磁盘加载内存页的故障
majflt/s:每秒发生的主要故障总数    #即需要从磁盘加载内存页的故障
VSZ     :虚拟内存使用情况(以千字节为单位)
RSS     :物理内存使用情况(以千字节为单位)
%MEM    :使用总内存占比情况
Command :进程的命令名称

        

2.3. 正在使用磁盘的进程

pidstat -d 1    # 只显示操作磁盘的进程

 在使用其他命令发现磁盘达到了瓶颈

我们可以通过 pidstat 找到使用磁盘的进程

pidstat -d 1

PID      :进程的PID
kB_rd/s  :磁盘每秒读数据(单位:KB)
kB_wr/s  :磁盘每秒写数据(单位:KB)
kB_ccwr/s:已被任务取消写入磁盘的数据(单位:KB)
Command  :进程的命令名称

        

2.4. 指定监控pid

# 同时监控CPU、内存、磁盘读写。指定某个PID使用-p,指定多个PID使用逗号分隔
pidstat -urd -p 6548,6551,6555 1 3   #1表示每隔1秒输出一次,3表示共输出3次

        

3. 自动化监控

#!/bin/bash

Help(){
        echo -e "Usage: $0 [ options ] [ <interval> [ <count> ] ]"
        echo -e "\t -a: Monitoring all processes"
        echo -e "\t -p{pid}: Specify the pid"
        echo -e "\t -k: Kill pidstat"
        }

Main(){
        local log="`pwd`/logs"

        [ ! -d ${log} ] && mkdir -p ${log}
        [ "$1" == "p" ] && options="-p $2 $3 $4" || options="$1 $2"

        # 输出CPU信息到logs/cpu.log
        pidstat -u ${options}   > ${log}/cpu.log        &
        # 输出内存信息到memory.log
        pidstat -r ${options}   > ${log}/memory.log     &
        # 输出磁盘读写到disk.log
        pidstat -d ${options}   > ${log}/disk.log       &
        # 上下文切换到context.log
        pidstat -w ${options}   > ${log}/context.log    &
        }


case $1 in
-a)
        Main $2 $3
        ;;
-p)
        Main p "$2" $3 $4
        ;;
-k)
        ps -ef |grep "pidstat" |grep `whoami` |grep -v grep |awk '{print $2}' |xargs kill -9
        ;;
*)
        Help
esac
意义:
同时监控CPU、内存、磁盘、上下文切换信息,输出到不同文件中

作用:
当某个时间段性能出现损耗,可以通过此脚本查看进程的使用情况

使用:
sh xxx.sh -a 1 86400          # xxx.sh表示脚本名,每1秒输出一次,共监控一天
sh xxx.sh -p 123,321 1 86400  # xxx.sh表示脚本名,-p指定单个或多个pid(多个使用逗号分隔),只监控指定的pid。每1秒输出一次,共监控一天
sh xxx.sh -k                  # 停止pidstat命令

        

4. 总结

    pidstat 无法直接监控整体的硬件资源,比如 cpu 的整体利用率、内存的使用情况等,该命令的主要作用是监控进程,比如查看正在使用cpu、正在使用内存、正在使用I/O的进程,并且可以详细的查看这些进程的使用情况。所以 pidstat 的作用主要是协助其他命令来分析硬件瓶颈,导致瓶颈的进程是哪些。

  • 查看cpu信息的命令:top、sar、iostat、nmon
  • 查看内存信息的命令:top、sar、nmon
  • 查看磁盘信息的命令:iostat、sar、nmon
  • 查看网络信息的命令:sar、nmon
  • 查看历史记录的命令:sar

iostat 链接文章:https://blog.csdn.net/m0_61066945/article/details/126473126
sar 链接文章:https://blog.csdn.net/m0_61066945/article/details/126213941
nmon 链接文章:https://blog.csdn.net/m0_61066945/article/details/126799593
top 链接文章:https://blog.csdn.net/m0_61066945/article/details/126452494

 

Linux系统中,可以通过几个常用的命令来查看进程所占用的CPU资源,主要有以下几种方法: 方法一:top命令 top命令是最常用的监控进程命令之一,因为它可以实时显示进程列表和CPU使用率等信息。可以通过输入以下命令来启动top: ``` $ top ``` top命令打开后会实时显示进程列表和CPU使用率等信息,其中在进程列表中可以看到每个进程PID、CPU使用率和内存使用率等信息。同时按下shift+p键可以按照CPU使用率排序,看到谁占用了更多的CPU资源。 方法二:ps命令 ps命令是另外一个常用的查看进程信息命令,通过以下命令可以查看所有进程的CPU使用率: ``` $ ps -aux | sort -nrk 3,3 | head -n 10 ``` 以上命令中,-aux选项是用来列出所有进程的详细信息,sort命令是用来将进程按照CPU使用率排序,head命令是用来只显示最前面的10个进程。 方法三:htop命令 htop命令是一个增强版的top命令,通过以下命令可以启动htop: ``` $ htop ``` htop命令打开后可以通过F6键将进程按照CPU使用率进行排序,并且能够更加直观地显示每个进程的CPU使用率和内存使用率等信息,非常方便。 方法四:pidstat命令 pidstat命令是一个专门用来监控进程命令,通过以下命令可以查看进程的CPU使用率: ``` $ pidstat -p <PID> 1 ``` 其中<PID>是需要查看的进程ID,1是每秒钟刷新一次该进程的CPU使用率。可以通过改变1的值来改变刷新频率。 通过以上几种方法,我们可以很方便地查看Linux系统中每个进程所占用的CPU资源,从而方便对系统进行优化和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值