每天掌握一个Linux命令 - pidstat
在Linux系统里,进程运行时可能出现各种资源使用问题,比如某个程序突然“吃”爆CPU、内存占用居高不下,或者磁盘读写变得很慢,让人摸不着头脑。这时候,pidstat就像一位专业的“系统医生”闪亮登场啦!它能精准“诊断”单个进程或线程的CPU、内存、I/O等资源使用情况,帮你快速找到那个“捣乱”的进程——是哪个程序在疯狂抢占CPU?哪个进程偷偷占用了大量内存?又是谁在不停地读写磁盘拖慢系统?有了pidstat,这些问题都能一目了然,特别适合系统管理员、开发人员排查性能故障、优化资源分配,让Linux系统运行得更顺畅!
Linux 命令工具 pidstat 使用指南
- 一、工具概述
- 二、安装方式
- 1. 主流 Linux 系统安装
- 2. 验证安装
- 三、核心功能
- 四、基础用法
- 1. 基本语法
- 2. 常用选项
- (1)CPU 相关
- (2)内存相关
- (3)I/O 相关
- (4)上下文切换
- 五、进阶操作
- 1. 监控线程(TID)
- 2. 绑定 CPU 核心监控
- 3. 合并同一进程的多个线程数据
- 4. 历史数据查询(需提前配置 `sysstat` 日志)
- 六、实战案例
- 案例 1:定位高 CPU 进程
- 案例 2:排查内存泄漏
- 案例 3:优化 I/O 密集型进程
- 七、注意事项
一、工具概述
pidstat 是 Linux 系统中用于监控进程资源使用情况的强大工具,属于 sysstat 工具包的一部分。它可以按指定间隔统计单个进程或线程的 CPU、内存、I/O、上下文切换等详细指标,常用于性能分析、故障排查和资源优化场景。
二、安装方式
1. 主流 Linux 系统安装
- Ubuntu/Debian
sudo apt update && sudo apt install sysstat
- CentOS/RHEL/Fedora
sudo yum install sysstat # CentOS/RHEL sudo dnf install sysstat # Fedora
- Arch Linux
sudo pacman -S sysstat
2. 验证安装
安装完成后,执行 pidstat -V
查看版本信息,确认工具可用。
三、核心功能
功能分类 | 说明 |
---|---|
CPU 监控 | 统计进程的 CPU 使用率、用户态/内核态时间、CPU 迁移情况等。 |
内存监控 | 显示进程的内存占用(RSS、虚拟内存等)及内存分页活动。 |
I/O 监控 | 统计进程的磁盘读写速率、I/O 等待时间、块设备操作次数。 |
上下文切换 | 分析进程的自愿/非自愿上下文切换次数,定位线程竞争或阻塞问题。 |
线程监控 | 支持按线程(TID)统计资源使用情况,需配合 -t 参数启用。 |
历史数据查询 | 结合 sysstat 的数据存储功能,查询过去某个时间段的进程状态(需配置 sysstat 定时任务)。 |
四、基础用法
1. 基本语法
pidstat [选项] [间隔时间] [统计次数]
- 间隔时间:采样间隔(单位:秒),必填。
- 统计次数:采样次数,可选;若省略则持续采样直至手动终止(
Ctrl+C
)。
2. 常用选项
(1)CPU 相关
-
-u
(默认):监控 CPU 使用率(含用户态、内核态、等待 I/O 时间等)。pidstat -u 2 3 # 每 2 秒采样一次,共采样 3 次
- 输出字段说明:
列名 含义 UID
进程所属用户 ID。 PID
进程 ID。 %usr
用户态 CPU 使用率(%)。 %system
内核态 CPU 使用率(%)。 %guest
虚拟机 CPU 使用率(%)。 %wait
进程等待 I/O 的 CPU 时间百分比(重要性能指标)。 %CPU
总 CPU 使用率(%usr + %system + %guest + %wait)。 CPU
进程当前绑定的 CPU 核心编号(从 0 开始)。
- 输出字段说明:
-
-p <PID>
:指定监控单个进程(多个 PID 用逗号分隔,如-p 1234,5678
)。pidstat -u -p 1234 5 # 监控 PID 为 1234 的进程,每 5 秒采样一次
(2)内存相关
-r
:监控进程内存使用情况(RSS、虚拟内存、页交换等)。pidstat -r 2
- 关键字段:
%mem
:进程占用物理内存百分比。RSS
:常驻内存大小(KB)。VSZ
:虚拟内存大小(KB)。Data
:数据段内存大小(KB)。
- 关键字段:
(3)I/O 相关
-d
:监控进程的磁盘 I/O 活动(读/写速率、操作次数等)。pidstat -d 1
- 关键字段:
kB_read/s
:每秒读取磁盘数据量(KB)。kB_wrtn/s
:每秒写入磁盘数据量(KB)。iodelay
:I/O 操作延迟时间(毫秒)。
- 关键字段:
(4)上下文切换
-w
:统计进程的上下文切换次数(自愿切换cswch
和非自愿切换nvcswch
)。pidstat -w 2
- 字段说明:
cswch/s
:每秒自愿上下文切换次数(如等待 I/O 时)。nvcswch/s
:每秒非自愿上下文切换次数(如被内核强制调度)。
- 字段说明:
五、进阶操作
1. 监控线程(TID)
添加 -t
参数,将 PID 替换为线程 ID(TID):
pidstat -u -t -p 1234 2 # 监控 PID 为 1234 的进程下所有线程
pidstat -u -t -p 1234,1235 2 # 监控特定线程(TID=1234、1235)
2. 绑定 CPU 核心监控
-C <CPU列表>
:按 CPU 核心编号过滤进程(如-C 0,1
表示监控绑定到 CPU 0 和 1 的进程)。pidstat -u -C 0 2 # 监控所有绑定到 CPU 0 的进程
3. 合并同一进程的多个线程数据
-T ALL
:统计进程及其所有线程的资源总和(需配合-p
指定进程 PID)。pidstat -u -T ALL -p 1234 2 # 合并线程数据,显示进程整体资源占用
4. 历史数据查询(需提前配置 sysstat
日志)
修改 /etc/sysstat/sysstat.conf
,启用数据保存(默认已启用),然后通过 -f
参数指定日志文件:
pidstat -f /var/log/sysstat/sa20 # 查询 20 号的历史数据(格式:saDD)
六、实战案例
案例 1:定位高 CPU 进程
场景:系统整体 CPU 使用率高,需确定具体进程。
操作:
pidstat -u 1 5 # 每秒采样一次,持续 5 秒
- 分析:观察
%CPU
列,找出持续高于平均值的 PID,结合%usr
和%system
判断是用户态还是内核态占用过高。
案例 2:排查内存泄漏
场景:某服务内存占用持续增长,怀疑内存泄漏。
操作:
pidstat -r -p 5678 30 # 每 30 秒监控 PID=5678 的进程内存变化
- 分析:观察
RSS
和%mem
字段,若持续上升且无回落,可能存在内存泄漏。
案例 3:优化 I/O 密集型进程
场景:数据库进程响应缓慢,怀疑磁盘 I/O 瓶颈。
操作:
pidstat -d -p 9876 5 # 每 5 秒监控数据库进程的 I/O 情况
- 分析:若
kB_read/s
或kB_wrtn/s
持续较高,且iodelay
较大,可能需要优化磁盘或调整进程 I/O 策略。
七、注意事项
- 权限要求:部分指标(如内核态 CPU 时间、线程监控)需以
root
权限执行。 - 性能影响:高频采样(如间隔 <1 秒)可能对系统造成轻微性能开销,生产环境建议使用 5-10 秒间隔。
- 线程与进程区分:默认监控进程级数据,需显式添加
-t
参数才能查看线程信息。 - 日志存储:历史数据查询依赖
sysstat
的日志机制,需确保日志文件存在且权限正确。 - 字段含义:注意
%CPU
是多核 CPU 下的总占用率(可能超过 100%),CPU
列显示当前绑定的核心(动态变化时可能为空)。
通过合理组合 pidstat
的参数,可精准定位进程级性能问题,为系统调优提供数据支撑。