pidstat 是 sysstat 工具包含的一个命令,主要用于监控 Linux Kernel 管理的进程资源占用情况,包括 CPU,IO,内存,线程等等。

The pidstat command is used for monitoring individual tasks currently being managed by the Linux kernel.

pidstat 首次运行会显示系统自开机起各项统计,之后运行将显示从上一次运行到该次运行的统计信息。

installation

apt-get install sysstat

usage

pidstat [options] [interval] [times]

常用的参数:

  • -u 默认参数,显示各个进程的 CPU 统计信息
  • -r 显示各个进程的内存使用情况
  • -d 显示各个进程的 IO 使用
  • -w 显示各个进程的上下文切换
  • -p PID 指定 PID

比如常见的每一秒查看 IO 统计,统计 10 次

pidstat -d 1 10

Examples

所有进程的 CPU 统计信息

直接运行 pidstat 默认显示所有进程的 CPU 使用信息,等效于 pidstat -u -p ALL

pidstat -u 1 10
pidstat

Result fields:

  • UID
  • PID
  • %usr: 进程在用户空间占用 cpu 的百分比
  • %system: 进程在内核空间占用 CPU 百分比
  • %guest: 进程在虚拟机占用 CPU 百分比
  • %wait: 进程等待运行的百分比
  • %CPU: 进程占用 CPU 百分比
  • CPU: 处理进程的 CPU 编号
  • Command: 进程名

显示内存统计信息

Following command will display PID memory usage 10 times every 2 seconds:

pidstat -r 2 10

Result fields:

  • UID
  • PID
  • Minflt/s : 每秒次缺页错误次数 (minor page faults),虚拟内存地址映射成物理内存地址产生的 page fault 次数
  • Majflt/s : 每秒主缺页错误次数 (major page faults), 虚拟内存地址映射成物理内存地址时,相应 page 在 swap 中
  • VSZ virtual memory usage : 该进程使用的虚拟内存 KB 单位
  • RSS : 该进程使用的物理内存 KB 单位
  • %MEM : 内存使用率
  • Command : 该进程的命令 task name

显示 IO 统计信息

pidstat -d

Result field:

  • UID
  • PID
  • kB_rd/s: 每秒进程从磁盘读取的数据量 KB 单位 read from disk each second KB
  • kB_wr/s: 每秒进程向磁盘写的数据量 KB 单位 write to disk each second KB
  • kB_ccwr/s: 每秒进程向磁盘写入,但是被取消的数据量,This may occur when the task truncates some dirty pagecache.
  • iodelay: Block I/O delay, measured in clock ticks
  • Command: 进程名 task name

T 选项来打印更详细信息

使用 -T [TASK|CHILD|ALL] 来报告打印更详细的信息,默认 pidstat 使用 TASK,表示监控独立的任务信息。

  • TASK 报告独立的进程
  • CHILD 报告进程下所有线程的情况
  • ALL 输出进程及线程统计信息

Specific PID

To show CPU, memory, IO:

pidstat -u -p PID
pidstat -r -p PID
pidstat -d -p PID

比如要查看 PID 为 12002 的进程的 CPU 使用情况,并且要查看所有子线程,每隔 1 秒输出一次,输出 10 次,则可以

pidstat -T ALL -u -p 12002 1 10

reference