进程监控

pidstat [option] interval [count]

监控进程的内存使用情况

$ pidstat -r  -p 26092 1 5
Linux 2.6.32-33-server (pro-srv4) 	Wednesday, November 25, 2015 	_x86_64_	(8 CPU)

11:16:38 HKT       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
11:16:39 HKT     26092      0.00      0.00 2983032 607484   3.69  java
11:16:40 HKT     26092      0.00      0.00 2983032 607484   3.69  java
11:16:41 HKT     26092      0.00      0.00 2983032 607484   3.69  java
11:16:42 HKT     26092      0.00      0.00 2983032 607484   3.69  java
11:16:43 HKT     26092      0.00      0.00 2983032 607484   3.69  java
Average:        26092      0.00      0.00 2983032 607484   3.69  java

列说明:

minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数 majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生 VSZ: 虚拟内存:整个进程使用的虚拟内存(KB) RSS: 常驻内存大小,占用的非交换分区的物理内存(KB) %MEM: 进程当前占用可用内存的百分比 Command: 进程对应的命令

监控进程的IO使用情况

➜  ~  pidstat -d -p 2942 1 5
Linux 3.16.0-50-generic (yang) 	2015年11月25日 	_x86_64_	(4 CPU)

11时53分57秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
11时53分58秒  1000      2942      0.00      0.00      0.00  java
11时53分59秒  1000      2942      0.00      0.00      0.00  java
11时54分00秒  1000      2942      0.00      0.00      0.00  java
11时54分01秒  1000      2942      0.00      0.00      0.00  java
11时54分02秒  1000      2942      0.00      0.00      0.00  java
Average:     1000      2942      0.00      0.00      0.00  java
➜  ~

列说明:

kb_rd/s:每秒读多少KB kb_rw/s:每秒写多少KB kb_ccwr/s:每秒多少KB正准备写到磁盘时被进程取消

监控进程的CPU使用情况

➜  ~  pidstat -u -p 2942 1 5
Linux 3.16.0-50-generic (yang) 	2015年11月25日 	_x86_64_	(4 CPU)

11时59分19秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
11时59分20秒  1000      2942    1.00    1.00    0.00    2.00     3  java
11时59分21秒  1000      2942    1.00    0.00    0.00    1.00     3  java
11时59分22秒  1000      2942    1.00    1.00    0.00    2.00     3  java
11时59分23秒  1000      2942    1.00    0.00    0.00    1.00     3  java
11时59分24秒  1000      2942    2.00    0.00    0.00    2.00     3  java
Average:     1000      2942    1.20    0.40    0.00    1.60     -  java

列说明:

%usr:用户态CPU占用总CPU使用百分比 %system:内核态CPU占总CPU使用百分比 %guest: 进程运行在虚拟CPU上占用的百分比 cpu: 进程运行在哪个CPU核上.

多处理器情况

pidstat -I 后面接的参数和上面的一样.

说明:这时,CPU的占用率是/CPU核心数后的数据的,没有 -I 的话,是看成单个CPU后的总占用率.

进程堆栈的情况

➜  ~  pidstat -s -p 2942 1 5
Linux 3.16.0-50-generic (yang) 	2015年11月25日 	_x86_64_	(4 CPU)

14时36分01秒   UID       PID StkSize  StkRef  Command
14时36分02秒  1000      2942     140      44  java
14时36分03秒  1000      2942     140      44  java
14时36分04秒  1000      2942     140      44  java
14时36分05秒  1000      2942     140      44  java
14时36分06秒  1000      2942     140      44  java
Average:     1000      2942     140      44  java
➜  ~

列说明:

StkSize:为进程预留的栈大小(KB) StkRef:进程使用的栈大小(KB)

进程上下文切换情况

➜  ~  pidstat -w -p 2942 1 5
Linux 3.16.0-50-generic (yang) 	2015年11月25日 	_x86_64_	(4 CPU)

14时38分55秒   UID       PID   cswch/s nvcswch/s  Command
14时38分56秒  1000      2942      0.00      0.00  java
14时38分57秒  1000      2942      0.00      0.00  java
14时38分58秒  1000      2942      0.00      0.00  java
14时38分59秒  1000      2942      0.00      0.00  java
14时39分00秒  1000      2942      0.00      0.00  java
Average:     1000      2942      0.00      0.00  java
➜  ~

列说明:

cswch/s:进程每秒自愿上下文切换次数,这当一个进程因为一个资源不可用而导致阻塞时就会出现这种自愿上下文切换.

nvcswch/s: 进程非自愿上下文切换次数。当一个进程在CPU时间片内执行期间被强迫放弃CPU时就会出现这种非自愿上下文切换.

线程的级别

pidstat -t 其他参数和以上相同.