常见命令-资源查看-pidstat命令实践
pidstat 是 Linux 系统性能监控的核心工具之一,属于 sysstat 工具包,能够深入追踪进程级资源消耗。在系统运维场景中,其常用方法涵盖以下关键场景和参数组合:
1. 基础监控场景
| 场景 | 命令示例 | 用途 |
|---|---|---|
| CPU 使用率 | pidstat -u 2 5 |
每2秒采样一次,共5次,监控所有进程的CPU使用率(用户态/内核态)。 |
| 内存使用 | pidstat -r 1 |
每秒刷新一次,显示进程的物理内存(RSS)、虚拟内存(VSZ)及缺页错误率。 |
| 磁盘 I/O | pidstat -d 2 -p 1234 |
监控进程ID 1234的磁盘读写速率(kB_rd/s、kB_wr/s),每2秒采样。 |
2. 高级排查场景
| 场景 | 命令示例 | 用途 |
|---|---|---|
| 线程级资源监控 | pidstat -t -p 5678 |
显示进程5678的线程级CPU和内存消耗,用于多线程应用分析。 |
| 上下文切换分析 | pidstat -w 1 |
统计进程的自愿(cswch/s)和非自愿(nvcswch/s)上下文切换次数,定位调度问题。 |
| 综合监控(CPU+内存+I/O) | pidstat -urd -p 8910 1 3 |
同时监控进程8910的CPU、内存、磁盘I/O,每秒一次,共3次。 |
3. 过滤与自动化
| 场景 | 命令示例 | 用途 |
|---|---|---|
| 按进程名过滤 | pidstat -C nginx -d |
仅监控名为 nginx 的进程的磁盘I/O。 |
| 后台长期监控 | nohup pidstat -urd 5 > pidstat.log & |
每5秒采样一次,保存到日志文件,用于长期趋势分析。 |
| 实时动态刷新 | watch -n 1 "pidstat -p 1234 -u" |
每秒刷新一次进程1234的CPU使用率(类似 top 动态视图)。 |
4. 输出项指标说明
| 输出项 | 监控类别 | 说明 | 单位/示例 | 典型分析场景 |
|---|---|---|---|---|
| PID | 通用 | 进程ID | 整数(如 1234) |
定位具体进程的全局资源消耗 |
| %usr | CPU | 进程在 用户态 的CPU使用率(执行用户代码) | 百分比(如 25.50%) |
计算密集型任务(如数据处理、算法运算) |
| %system | CPU | 进程在 内核态 的CPU使用率(系统调用、中断处理等) | 百分比(如 5.20%) |
频繁I/O或锁竞争(如数据库事务、网络请求处理) |
| %guest | CPU | 进程在虚拟机(Guest OS)中的CPU使用率(仅虚拟化环境有效) | 百分比(如 0.00%) |
虚拟化环境中虚拟机资源分配分析 |
| %CPU | CPU | 进程 总CPU使用率(%usr + %system + %guest) |
百分比(如 30.70%) |
快速判断进程对CPU的整体压力 |
| CPU | CPU | 进程运行的 CPU核心编号 | 整数(如 2) |
多核负载均衡分析(如绑定特定CPU的进程) |
| Command | 通用 | 进程名称(可能截断显示) | 字符串(如 java) |
快速识别进程归属(如确认是否为预期服务) |
| kB_rd/s | 磁盘I/O | 进程每秒 从磁盘读取的数据量 | KB/s(如 102.40) |
读取密集型任务(如日志分析、文件加载) |
| kB_wr/s | 磁盘I/O | 进程每秒 向磁盘写入的数据量 | KB/s(如 50.60) |
写入密集型任务(如数据库持久化、缓存刷新) |
| kB_ccwr/s | 磁盘I/O | 进程每秒 因写入取消而释放的磁盘数据量(如写操作被回滚) | KB/s(如 0.00) |
事务回滚或临时文件清理场景 |
| iodelay | 磁盘I/O | 进程的 I/O操作延迟(从发起请求到完成的平均等待时间) | 时钟周期(如 1200) |
高延迟I/O分析(如磁盘性能瓶颈) |
| VSZ | 内存 | 进程的 虚拟内存大小(包含所有映射区域,如代码、堆、共享库等) | KB(如 245678) |
判断进程内存申请的总体规模 |
| RSS | 内存 | 进程的 物理内存占用(实际驻留在内存中的数据量) | KB(如 12345) |
检测内存泄漏(持续增长的RSS) |
| %MEM | 内存 | 进程占用 物理内存的百分比(相对于系统总内存) | 百分比(如 1.20%) |
快速识别内存消耗大户 |
| minflt/s | 内存 | 每秒 次要缺页错误次数(无需磁盘IO,可通过空闲物理页直接处理) | 次数/秒(如 100) |
常规内存分配(如堆栈扩展) |
| majflt/s | 内存 | 每秒 主要缺页错误次数(需从磁盘加载内存页) | 次数/秒(如 5) |
内存不足或频繁文件映射访问(如大文件读取) |
| UID | 通用 | 进程所有者的 用户ID | 整数(如 1000) |
安全审计(如非特权用户运行高危进程) |
| cswch/s | 上下文切换 | 每秒 自愿上下文切换次数(进程主动释放CPU,如等待I/O) | 次数/秒(如 200) |
I/O密集型任务(如网络服务等待请求) |
| nvcswch/s | 上下文切换 | 每秒 非自愿上下文切换次数(进程被系统强制剥夺CPU) | 次数/秒(如 50) |
CPU资源争抢(如高优先级进程抢占) |
| TID | 线程 | 线程ID(需 -t 参数) |
整数(如 5678) |
多线程应用分析(如定位热点线程) |
5. 典型运维场景示例
场景1:定位CPU高负载进程
pidstat -u 1 5 | awk '$7 > 20 {print}' # 筛选CPU使用率超过20%的进程
操作:发现异常进程后,结合 top 或 perf 分析代码热点。
场景2:检测内存泄漏
pidstat -r -p 1234 60 # 每60秒监控进程1234的内存增长趋势
操作:若 RSS 持续上升且无释放,可能存在内存泄漏。
场景3:分析磁盘I/O瓶颈
pidstat -d 1 | grep -v "0.00" # 过滤掉无I/O活动的进程
操作:结合 iostat 确认磁盘全局负载,优化高I/O进程的读写策略。
注意事项
- 权限:需
root权限查看其他用户的进程。 - 首次运行:首次执行
pidstat显示系统启动以来的累计值,后续显示增量。 - 结合工具:与
sar、vmstat、iotop等工具配合,全面分析系统性能。
通过灵活组合参数,pidstat 可快速定位进程级资源瓶颈,是性能调优和故障排查的核心工具。
前事不忘,后事之师
浙公网安备 33010602011771号