大家好,欢迎来到IT知识分享网。
描述
pidstat 用于监控正在运行的进程的详细信息,包括进程的 CPU 使用量、内存使用量、I/O 情况和上下文切换次数等。这个命令一般用于配合其他命令一起使用,比如使用 iostat 发现了磁盘瓶颈,那么就需要使用 pidstat 来找到这个进程。
注意:
- 首次运行时显示自系统启动开始的各项统计信息。
- 普通用户无法监控其他用户进程,需要使用root用户监控。
文章目录如下
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
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114722.html







