pidstat
是 Linux 系统中的一个命令,用于监控系统中各个进程的性能数据,帮助排查系统瓶颈。与常用的 top
或 vmstat
不同,pidstat
可以提供更加详细的基于进程的性能指标,比如 CPU、内存、I/O、上下文切换等。下面我会详细介绍各个方面的内容。
一、pidstat
命令的基本使用
1. 安装
通常,pidstat
是 sysstat
软件包的一部分。安装方式如下:
sudo apt-get install sysstat # Debian/Ubuntu 系
sudo yum install sysstat # CentOS/RedHat 系
2. 基本命令格式
pidstat [options] [interval [count]]
interval
: 两次采样的时间间隔(以秒为单位)count
: 采样的次数
二、pidstat
命令选项
-
-u:显示每个进程的 CPU 使用情况
pidstat -u 1 5 # 每隔1秒采集一次,采集5次
输出示例:
12:32:35 UID PID %usr %system %guest %CPU CPU Command 12:32:36 0 123 15.00 2.50 0.00 17.50 0 process_name
- %usr:用户态 CPU 占用率
- %system:内核态 CPU 占用率
- %CPU:总的 CPU 占用率(用户态 + 内核态)
-
-r:显示每个进程的内存使用情况
pidstat -r 1 5
输出示例:
12:32:35 UID PID minflt/s majflt/s VSZ RSS Command 12:32:36 0 456 12.00 0.00 300000 20000 process_name
- minflt/s:每秒次的次缺页异常
- majflt/s:每秒次的主缺页异常
- VSZ:虚拟内存使用量(单位 KB)
- RSS:常驻内存使用量(单位 KB)
-
-d:显示每个进程的 I/O 使用情况
pidstat -d 1 5
输出示例:
12:32:35 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 12:32:36 0 789 0.00 30.00 0.00 process_name
- kB_rd/s:每秒读取的千字节数
- kB_wr/s:每秒写入的千字节数
- kB_ccwr/s:每秒取消的写入操作产生的千字节数
-
-w:显示每个进程的任务切换情况
pidstat -w 1 5
输出示例:
12:32:35 UID PID cswch/s nvcswch/s Command 12:32:36 0 890 25.00 10.00 process_name
- cswch/s:每秒自愿上下文切换次数
- nvcswch/s:每秒非自愿上下文切换次数
-
-p:指定一个或多个进程进行监控
pidstat -p 1234 -u 1 5
监控 PID 为 1234 的进程的 CPU 使用情况。
-
-t:显示线程级别的统计信息
pidstat -t -u 1 5
三、输出指标解读
-
CPU 异常:
- 如果
%usr
或%system
数值过高,表明该进程占用了较多的 CPU 资源,可以通过进一步检查具体的进程,或者检查进程的日志,找出可能导致高 CPU 占用的代码或操作。 - 频繁的上下文切换(
cswch/s
和nvcswch/s
)也会导致 CPU 异常。这通常是由于多线程同步、锁竞争等原因导致的。
- 如果
-
内存异常:
- 如果
RSS
较高,表明该进程使用了大量的物理内存,可能需要优化内存管理或者检查内存泄漏。 majflt/s
较高,表示大量的缺页异常,可能由于物理内存不足,系统频繁使用交换分区(swap)导致性能下降。
- 如果
-
I/O 异常:
kB_rd/s
和kB_wr/s
较高,可能说明进程进行了大量的读写操作,容易导致 I/O 瓶颈。可以考虑优化磁盘性能或减少不必要的 I/O 操作。kB_ccwr/s
较高,表示有较多取消的写入操作,可能需要优化写入逻辑。
四、根据 pidstat
排查性能问题
-
CPU 使用率高:
- 使用
pidstat -u
命令找到哪个进程 CPU 使用率最高,结合进程的PID
,进一步分析该进程,检查是否是逻辑问题或代码的计算密集型操作。
- 使用
-
内存使用过高:
- 使用
pidstat -r
检查进程的内存使用情况。如果RSS
和VSZ
持续增加,可能是存在内存泄漏的问题。
- 使用
-
I/O 瓶颈:
- 使用
pidstat -d
检查是否存在过高的 I/O 读写,进一步判断是否是由于进程频繁进行文件操作或数据库操作导致的性能瓶颈。
- 使用
-
上下文切换问题:
- 使用
pidstat -w
查看自愿与非自愿上下文切换次数,若切换次数高,可能是锁竞争、线程调度等问题,可以进一步检查代码中的线程模型和锁机制。
- 使用
五、命令的工作原理
pidstat
是基于 Linux 内核的 /proc
文件系统工作,通过读取 /proc/[pid]/stat
、/proc/[pid]/status
等文件来获取每个进程的 CPU、内存、I/O、任务切换等信息。这些信息由内核通过周期性刷新 /proc
文件系统来提供,因此可以提供近乎实时的性能监控数据。
总结起来,pidstat
是一个非常有用的性能分析工具,尤其适合进程级别的性能调优。通过定期监控进程的各项指标,可以有效地发现系统中的性能瓶颈,并采取相应的优化措施。