导读:
一、用事实说话
二、关于LSOF命令的其它用法:
三、参考文档:

正文:
lsof:Finding open files with lsof
作用:查看文件被哪些进程打开
一、用事实说话
【实验】Linux下文件删除、句柄与空间释放问题
窗口1:创建test文件,并用less命令打开它
[root@monitor monitor]# echo "zhengBin is Bkeep" >> test
[root@monitor monitor]# ls –sortk  
  8  -rw-r--r—1  root       1          Dec  9   16:02 error.txt
120  -rw-r--r—1  root       112         Dec  10  16:38 test
[root@monitor monitor]# less test
zhengBin is Bkeep
(END)
窗口2:使用lsof命令排查问题
[root@monitor monitor]# rm  –rf  test
[root@monitor monitor]# lsof |grep test          //注意,这里test文件已被标记为 “deleted”,但仍然被less进程锁定(pid:23253)
less      23253       root    4r      REG      253,0       18    2850936 /usr/monitor/test (deleted)
[root@monitor ~]# ps -ef |grep 23253         //查看less进程的系统用户,为root!
root     23253 23042  0 17:16 pts/1    00:00:00 less test
root     23291 23256  0 17:17 pts/0    00:00:00 grep 23253
[root@monitor ~]# kill -9 23253   //杀掉该进程,系统才会释放test占用的磁盘空间。(重启系统或服务也行)
[root@monitor ~]# lsof |grep test
没有了,说明空间已被释放!
二、关于lsof命令的其它用法:
1,查看目录和文件正在被那些进程使用。
[root@monitor monitor]# umount /
umount: /: device is busy
umount: /: device is busy
[root@monitor monitor]# lsof  /
COMMAND     PID      USER   FD   TYPE DEVICE     SIZE    NODE NAME
init          1      root  cwd    DIR  253,0     4096       2 /
init          1      root  rtd    DIR  253,0     4096       2 /
init          1      root  txt    REG  253,0    38620 9306178 /sbin/init
init          1      root  mem    REG  253,0   125736 6686192 /lib/ld-2.5.so
init          1      root  mem    REG  253,0  1602128 6686193 /lib/libc-2.5.so
init          1      root  mem    REG  253,0    16428 6686196 /lib/libdl-2.5.so
init          1      root  mem    REG  253,0    93508 6686210 /lib/libselinux.so.1
init          1      root  mem    REG  253,0   242880 6686209 /lib/libsepol.so.1
migration     2      root  cwd    DIR  253,0     4096       2 /
migration     2      root  rtd    DIR  253,0     4096       2 /
ksoftirqd     3      root  cwd    DIR  253,0     4096       2 /
ksoftirqd     3      root  rtd    DIR  253,0     4096       2 /
2,查看远程ip调用了系统那些进程
[root@monitor monitor]# netstat -natp
tcp        0   1008 ::ffff:192.168.254.51:22    ::ffff:192.168.254.149:1066 ESTABLISHED 22779/0
[root@monitor monitor]# lsof -i @192.168.254.149
COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
sshd    22779 root    3u  IPv6  98877       TCP 192.168.254.51:ssh->192.168.254.149:fpo-fns (ESTABLISHED)
3,根据端口号查看服务名
[root@monitor monitor]# lsof -i :25
COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
sendmail 4653 root    4u  IPv4   9307       TCP monitor:smtp (LISTEN)
4,谁在打开sendmail.pid文件?
[root@monitor run]# lsof  /var/run/sendmail.pid
COMMAND   PID USER   FD   TYPE DEVICE SIZE    NODE NAME
sendmail 4653 root    5wW  REG  253,0   33 9667079 /var/run/sendmail.pid
5,【重要】查看某个进程号所打开的所有系统文件
参数说明:

-a,所有参数都必须持有真实的文件显示
-p,进程号
-d,txt记录将被过滤掉;^ 排除的意思  (the carat [^] means exclude).

[root@monitor run]# lsof -a -p 4653 -d ^txt        //【重要】
COMMAND   PID USER   FD   TYPE     DEVICE   SIZE    NODE NAME
sendmail 4653 root  cwd    DIR      253,0   4096 9666678 /var/spool/mqueue
sendmail 4653 root  rtd    DIR      253,0   4096       2 /
sendmail 4653 root  mem    REG      253,0        6684758 /lib/libdb-4.3.so (path inode=6684892)
sendmail 4653 root  DEL    REG      253,0        2107155 /usr/lib/liblber-2.3.so.0.2.15.#prelink#.1kBcGu
sendmail 4653 root  DEL    REG      253,0        2107070 /usr/lib/libgssapi_krb5.so.2.2.#prelink#.Y8RNd8
sendmail 4653 root  mem    REG      253,0        2101464 /usr/lib/libz.so.1.2.3 (path inode=2117529)
sendmail 4653 root  mem    REG      253,0  46680 6684713 /lib/libnss_files-2.5.so
sendmail 4653 root  mem    REG      253,0  14596 2162994 /usr/lib/sasl2/libanonymous.so.2.0.22
sendmail 4653 root  mem    REG      253,0 905200 2164220 /usr/lib/sasl2/libsasldb.so.2.0.22
sendmail 4653 root  mem    REG      253,0        6684723 /lib/libresolv-2.5.so (path inode=6686208)
sendmail 4653 root  mem    REG      253,0        6684701 /lib/libcrypt-2.5.so (path inode=6686216)
sendmail 4653 root  mem    REG      253,0        6684759 /lib/libkeyutils-1.2.so (path inode=6686207)
sendmail 4653 root    2w   CHR        1,3           1449 /dev/null
sendmail 4653 root    3u  unix 0xd45eb740           9306 socket
sendmail 4653 root    4u  IPv4       9307            TCP monitor:smtp (LISTEN)
sendmail 4653 root    5wW  REG      253,0     33 9667079 /var/run/sendmail.pid
6,ls命令参数解释
[root@monitor monitor]# ls –sortk  
  8  -rw-r--r—1  root       1          Dec  9   16:02 error.txt
120  -rw-r--r—1  root       112         Dec  10  16:38 test
参数说明:
s:第一列显示的块大小(个);o:类似l 但不显示group;   S:按文件大小排序
r:倒序;  t:按时间排序   k:字节数按KB来显示
三、参考文档:
http://www.ibm.com/developerworks/aix/library/au-lsof.html
http://www.eygle.com/archives/2009/10/linux_unix_file_handle_deleted.html
http://bkeep.blog.163.com/blog/static/12341429020097155811342/
现象:在netstat的时候发现大量处于LAST_ACK状态的TCP连接,达到在ESTABLISHED状态的90%以上[root@ccsafe ~]# netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c                
       6 CLOSE_WAIT
       7 CLOSING      
    6838 ESTABLISHED
    1037 FIN_WAIT1    
     357 FIN_WAIT2    
    5830 LAST_ACK    
       2 LISTEN      
     276 SYN_RECV    
      71 TIME_WAIT    
[root@ccsafe ~]#
看看系统状态,性能都花在系统中断和上下文切换
[root@ccsafe ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b    swpd    free    buff cache    si    so     bi     bo    in    cs us sy id wa st
1 0       0 3091812 363032 284132     0     0      0      0     1     1 0 0 100 0 0
0 0       0 3091812 363032 284132     0     0      0      0 13750 3174 0 5 94 0 0
0 0       0 3091936 363032 284132     0     0      0      0 13666 3057 1 5 94 0 0
0 0       0 3092060 363032 284132     0     0      0     16 13749 3030 0 5 95 0 0
0 0       0 3092060 363032 284132     0     0      0      0 13822 3144 0 5 95 0 0
0 0       0 3092060 363032 284132     0     0      0      0 13390 2961 0 5 95 0 0
0 0       0 3092060 363032 284132     0     0      0      0 13541 3182 0 6 94 0 0

查看socket队列信息
[root@ccsafe ~]# sar -n SOCK 5
Linux 2.6.18-53.1.13.el5PAE (ccsafe)      10/21/2008
06:31:43 PM     totsck     tcpsck     udpsck     rawsck    ip-frag     tcp-tw
06:31:48 PM       6951      13868          1          0          0        430
Average:          6951      13868          1          0          0        430
根据TCP状态的变化过程来分析,LAST_ACK属于被动关闭连接过程中的状态
ESTABLISHED->CLOSE_WAIT->(发送ACK)->LAST_ACK->(发送FIN+接收ACK)->CLOSED
现在状态都堆积到LAST_ACK,初步判断问题从上下两个状态着手
调节一下LAST_ACK时间...
[root@ccsafe ~]# sysctl -a |grep last_ack
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
[root@ccsafe ~]# sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack=10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 10
[root@ccsafe ~]# sysctl -p
[root@ccsafe ~]# watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 5.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                    
       6 CLOSE_WAIT
       9 CLOSING
    6420 ESTABLISHED
     693 FIN_WAIT1
     391 FIN_WAIT2
    5081 LAST_ACK
       2 LISTEN
     203 SYN_RECV
      66 TIME_WAIT
检查一下LAST_ACK所对应的应用
[root@ccsafe ~]# netstat -ant|fgrep "LAST_ACK"|cut -b 49-75|cut -d ":" -f1|sort |uniq -c|sort -nr --key=1,7|head -5
     101 220.160.210.6
      46 222.75.65.69
      31 221.0.91.118
      24 222.210.8.160
      22 60.161.81.28
[root@ccsafe ~]#
[root@ccsafe ~]# netstat -an|grep "220.160.210.6"
tcp         0 17280 10.1.1.145:80            220.160.210.6:52787          ESTABLISHED
tcp         1 14401 10.1.1.145:80            220.160.210.6:52513          LAST_ACK    
tcp         1 14401 10.1.1.145:80            220.160.210.6:52769          LAST_ACK    
tcp         1 14401 10.1.1.145:80            220.160.210.6:52768          LAST_ACK    
tcp         0    8184 10.1.1.145:80            220.160.210.6:52515          LAST_ACK    
tcp         1 14401 10.1.1.145:80            220.160.210.6:52514          LAST_ACK    
tcp         0    8184 10.1.1.145:80            220.160.210.6:52781          LAST_ACK    

是TCP80端口的应用,调节一下nginx的keepalive时间...
[root@ccsafe ~]# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
2008/10/21 19:15:31 [info] 21352#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2008/10/21 19:15:31 [info] 21352#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
[root@ccsafe ~]# ps aux|egrep '(PID|nginx)'
USER        PID %CPU %MEM     VSZ    RSS TTY       STAT START    TIME COMMAND
root       8290 0.0 0.0    7572 1124 ?         Ss    Oct04    0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody     8291 0.2 0.3 19704 13776 ?         S     Oct04 71:35 nginx: worker process      
nobody     8292 0.3 0.2 17604 11680 ?         S     Oct04 77:26 nginx: worker process      
nobody     8293 0.2 0.4 22528 16636 ?         S     Oct04 58:13 nginx: worker process      
nobody     8294 0.3 0.4 24944 19020 ?         S     Oct04 94:07 nginx: worker process      
nobody     8295 0.3 0.5 27496 21508 ?         S     Oct04 84:41 nginx: worker process      
nobody     8296 0.3 0.1 13388 7496 ?         S     Oct04 84:14 nginx: worker process      
nobody     8297 0.2 0.0    9196 3268 ?         S     Oct04 58:21 nginx: worker process      
nobody     8298 0.3 0.2 15392 9504 ?         S     Oct04 75:16 nginx: worker process      
root      21354 0.0 0.0    3896    720 pts/0     S+    19:15    0:00 egrep (PID|nginx)
(动态加载新配置)
[root@ccsafe ~]# kill -HUP 8290
[root@ccsafe ~]#
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90 |sort |uniq -c                                                
       1 CLOSE_WAIT
    1138 CLOSING
    7161 ESTABLISHED
    1427 FIN_WAIT1
     396 FIN_WAIT2
    5740 LAST_ACK
       2 LISTEN
     350 SYN_RECV
     148 TIME_WAIT
...
[root@ccsafe ~]# netstat -ant|fgrep ":"|cut -b 77-90 |sort |uniq -c
    1151 CLOSING      
    8506 ESTABLISHED
    1452 FIN_WAIT1    
     666 FIN_WAIT2    
    6568 LAST_ACK    
       2 LISTEN      
     429 SYN_RECV    
      92 TIME_WAIT    
...

LAST_ACK不下,而且CLOSING 和FIN_WAIT突增
着重看看可影响主动断开TCP连接时几个参数
tcp_keepalive_intvl:探测消息发送的频率
tcp_keepalive_probes:TCP发送keepalive探测以确定该连接已经断开的次数
tcp_keepalive_time:当keepalive打开的情况下,TCP发送keepalive消息的频率
[root@ccsafe ~]# sysctl -a|grep tcp_keepalive
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 160
tcp_retries2:在丢弃激活(已建立通讯状况)的TCP连接之前?需要进行多少次重试
[root@ccsafe ~]# sysctl -a |grep tcp_retries
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_retries1 = 3
加速处理那些等待ACK的LAST_ACK,减少等待ACK的LAST_ACK的重试次数
[root@ccsafe ~]# sysctl -w net.ipv4.tcp_retries2=5
net.ipv4.tcp_retries2 = 5
减少keepalive发送的频率
[root@ccsafe ~]# sysctl -w net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_intvl = 15
[root@ccsafe ~]# sysctl -p
排除syncookies的影响
[root@ccsafe ~]# !ec
echo "0" >/proc/sys/net/ipv4/tcp_syncookies
[root@ccsafe ~]# echo "1" >/proc/sys/net/ipv4/tcp_syncookies
[root@ccsafe ~]# sysctl -a|grep tcp_keepalive                
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 160
[root@ccsafe ~]# sysctl -a|grep syncookies
net.ipv4.tcp_syncookies = 1
延长keepalive检测周期,保留ESTABLISHED数量
[root@ccsafe ~]# echo "1800" >/proc/sys/net/ipv4/tcp_keepalive_time
[root@ccsafe ~]# echo "5" >/proc/sys/net/ipv4/tcp_keepalive_probes
[root@ccsafe ~]# echo "15" >/proc/sys/net/ipv4/tcp_keepalive_intvl
[root@ccsafe ~]# sysctl -a|grep tcp_keepalive                      
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 1800
[root@ccsafe ~]# !wat
watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                          
       1 CLOSE_WAIT
     363 CLOSING
    5145 ESTABLISHED
    1073 FIN_WAIT1
     174 FIN_WAIT2
    6042 LAST_ACK
       2 LISTEN
     301 SYN_RECV
      85 TIME_WAIT

LAST_ACK不下,但是CLOSING有所回落
tcp_orphan_retries:在近端丢弃TCP连接之前?要进行多少次重试。
[root@ccsafe ~]# sysctl -a|grep tcp_orphan
net.ipv4.tcp_orphan_retries = 0
关键,丢TCP太频繁了,以至于后勤都跟不上。设置丢弃之前的重试次数
[root@ccsafe ~]# echo "3" >/proc/sys/net/ipv4/tcp_orphan_retries
[root@ccsafe ~]# !wat
watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                          
       1 CLOSE_WAIT
      24 CLOSING
    5422 ESTABLISHED
     279 FIN_WAIT1
     214 FIN_WAIT2
    1966 LAST_ACK
       2 LISTEN
     269 SYN_RECV
      74 TIME_WAIT
上下调节该值,找个合适的临界点
[root@ccsafe ~]# echo "7" >/proc/sys/net/ipv4/tcp_orphan_retries                  
[root@ccsafe ~]# !wat
watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                          
       1 CLOSE_WAIT
     175 CLOSING
    5373 ESTABLISHED
     436 FIN_WAIT1
     209 FIN_WAIT2
    3184 LAST_ACK
       2 LISTEN
     283 SYN_RECV
     110 TIME_WAIT
恢复,同时FIN_WAIT1的值过高。考虑减少tcp_fin_timeout时间
[root@ccsafe ~]# echo "2" >/proc/sys/net/ipv4/tcp_orphan_retries                  
[root@ccsafe ~]# sysctl -a|grep tcp_fin
net.ipv4.tcp_fin_timeout = 10
[root@ccsafe ~]# echo "5" >/proc/sys/net/ipv4/tcp_fin_timeout
[root@ccsafe ~]# !wat
watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                          
       2 CLOSE_WAIT
      17 CLOSING
    5665 ESTABLISHED
     145 FIN_WAIT1
     141 FIN_WAIT2
    1068 LAST_ACK
       2 LISTEN
     287 SYN_RECV
      68 TIME_WAIT
相比FIN_WAIT,SYN_RECV的值偏高。加大发送synack的质量
[root@ccsafe ~]# sysctl -a|grep synack
net.ipv4.tcp_synack_retries = 1
[root@ccsafe ~]# echo "2" >/proc/sys/net/ipv4/tcp_synack_retries
[root@ccsafe ~]# !wat
watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                          
       3 CLOSE_WAIT
      16 CLOSING
    5317 ESTABLISHED
     200 FIN_WAIT1
     158 FIN_WAIT2
    1001 LAST_ACK
       2 LISTEN
     303 SYN_RECV
      78 TIME_WAIT
[root@ccsafe ~]# sysctl -a|grep keepalive
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 1800
[root@ccsafe ~]# watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                          
       1 CLOSE_WAIT
       7 CLOSING
    5356 ESTABLISHED
     175 FIN_WAIT1
     136 FIN_WAIT2
    1045 LAST_ACK
       2 LISTEN
     345 SYN_RECV
      64 TIME_WAIT
减少keepalive的检测周期,LAST_ACK上升
[root@ccsafe ~]# echo "10" >/proc/sys/net/ipv4/tcp_keepalive_intvl
[root@ccsafe ~]# echo "1" >/proc/sys/net/ipv4/tcp_synack_retries                  
[root@ccsafe ~]# !wat
watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                                                
       1 CLOSE_WAIT
      13 CLOSING
    5605 ESTABLISHED
     212 FIN_WAIT1
     131 FIN_WAIT2
    1143 LAST_ACK
       2 LISTEN
     252 SYN_RECV
      79 TIME_WAIT
恢复
[root@ccsafe ~]# echo "15" >/proc/sys/net/ipv4/tcp_keepalive_intvl                
[root@ccsafe ~]# watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                        
       3 CLOSE_WAIT
      14 CLOSING
    5862 ESTABLISHED
     230 FIN_WAIT1
     205 FIN_WAIT2
    1064 LAST_ACK
       2 LISTEN
     244 SYN_RECV
      59 TIME_WAIT

[root@ccsafe ~]# watch -n 10 "netstat -ant|fgrep ":"|cut -b 77-90|sort |uniq -c"
Every 10.0s: netstat -ant|fgrep :|cut -b 77-90|sort |uniq -c                        
       3 CLOSE_WAIT
      26 CLOSING
    6712 ESTABLISHED
     270 FIN_WAIT1
     230 FIN_WAIT2
     994 LAST_ACK
       2 LISTEN
     254 SYN_RECV
      73 TIME_WAIT

[root@ccsafe ~]#
目前LAST_ACK占ESTABLISHED的量在15%左右
Linux统计/监控工具SAR详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如: 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看 怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看



sysstat 工具

内容提要
了解 sysstat 工具包的组成
理解 sar 累计工作方式的配置
掌握 sar 、iostat、mpstat 命令的使用
sysstat 工具简介

sysstat 是 Linux 系统中的常用工具包。它的主要用途是观察服务负载,比如CPU和内存的占用率、网络的使用率以及磁盘写入和读取速度等。
sysstat 工具包中包含两类工具:
即时查看工具:iostat、mpstat、sar
累计统计工具:sar
也就是说,sar 具有这两种功能。因此,sar 是 sysstat 中的核心工具。
为了实现 sar 的累计统计,系统必须周期地记录当时的信息,这是通过调用 /usr/lib/sa/ 中的三个工具实现的:
sa1 :收集并存储每天系统动态信息到一个二进制的文件中,用作 sadc 的前端程序
sa2 :收集每天的系统活跃信息写入总结性的报告,用作 sar 的前端程序
sadc :系统动态数据收集工具,收集的数据被写入一个二进制的文件中,它被用作 sar 工具的后端
在 CentOS 系统的默认设置中,以如下的方式使用这三个工具:
在守护进程 /etc/rc.d/init.d/sysstat 中使用 /usr/lib/sa/sadc -F -L - 命令创建当日记录文件,文件为 /var/log/sa/saDD,其中 DD 为当天的日期。当系统重新启动后,会向文件 /var/log/sa/saDD 输出类似 11:37:16 AM LINUX RESTART 这样的行信息。
在 cron 任务 /etc/cron.d/sysstat 中每隔10分钟执行一次 /usr/lib/sa/sa1 1 1 命令,将信息写入文件 /var/log/sa/saDD
在 cron 任务 /etc/cron.d/sysstat 中每天 23:53 执行一次 /usr/lib/sa/sa2 -A 命令,将当天的汇总信息写入文件 /var/log/sa/saDD
您可以修改 /etc/cron.d/sysstat 以适合您的需要。
另外,文件 /var/log/sa/saDD 为二进制文件,不能使用 more、less 等文本工具查看,必须用 sar 或 sadf 命令查看。
sar

在使用 Linux 系统时,常常会遇到各种各样的问题,比如系统容易死机或者运行速度突然变慢,这时我们常常猜测:是否硬盘空间不足,是否内存不足,是否 I/O 出现瓶颈,还是系统的核心参数出了问题?这时,我们应该考虑使用 sar 工具对系统做一个全面了解,分析系统的负载状况。
sar(System Activity Reporter)是系统活动情况报告的缩写。sar 工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。 sar 是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。为了提供不同的信息,sar 提供了丰富的选项、因此使用较为复杂。
sar 的命令格式

sar 的命令格式为:
sar  [ -A ] [ -b ] [ -B ] [ -c ] [ -d ] [ -i interval ] [ -p ] [ -q ]
     [ -r ] [ -R ] [ -t ] [ -u ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
     [ -n { DEV | EDEV | NFS | NFSD | SOCK | ALL } ]
     [ -x { pid | SELF | ALL } ] [ -X { pid | SELF | ALL } ]
     [ -I { irq | SUM | ALL | XALL } ] [ -P { cpu | ALL } ]
     [ -o [ filename ] | -f [ filename ] ]
     [ -s [ hh:mm:ss ] ] [ -e [ hh:mm:ss ] ]
     [ interval [ count ] ]
其中:
interval : 为取样时间间隔
count : 为输出次数,若省略此项,默认值为 1
常用选项:
选项 说明
-A  等价于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL
-b  显示I/O和传送速率的统计信息
-B  输出内存页面的统计信息
-c  输出进程统计信息,每秒创建的进程数
-d  输出每一个块设备的活动信息
-i interval  指定间隔时长,单位为秒
-p  显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
-q  输出进程队列长度和平均负载状态统计信息
-r  输出内存和交换空间的统计信息
-R  输出内存页面的统计信息
-t  读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间
-u  输出CPU使用情况的统计信息
-v  输出inode、文件和其他内核表的统计信息
-V  输出版本号信息
-w  输出系统交换活动信息
-W  输出系统交换的统计信息
-y  输出TTY设备的活动信息
-n {DEV|EDEV|NFS|NFSD|SOCK|ALL}  分析输出网络设备状态统计信息。
DEV  报告网络设备的统计信息
EDEV  报告网络设备的错误统计信息
NFS  报告 NFS 客户端的活动统计信息
NFSD  报告 NFS 服务器的活动统计信息
SOCK  报告网络套接字(sockets)的使用统计信息
ALL  报告所有类型的网络活动统计信息
-x {pid|SELF|ALL}  输出指定进程的统计信息。
pid  用 pid 指定特定的进程
SELF  表示 sar 自身
ALL  表示所有进程
-X {pid|SELF|ALL}  输出指定进程的子进程的统计信息
-I {irq|SUM|ALL|XALL}  输出指定中断的统计信息。
irq  指定中断号
SUM  指定输出每秒接收到的中断总数
ALL  指定输出前16个中断
XALL  指定输出全部的中断信息
-P {cpu|ALL}  输出指定 CPU 的统计信息
-o filename  将输出信息保存到文件 filename
-f filename  从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。
-s hh:mm:ss  指定输出统计数据的起始时间
-e hh:mm:ss  指定输出统计数据的截至时间,默认为18:00:00
sar 使用举例

从 /var/log/sa/saDD 中读取累计统计信息
1、输出CPU使用情况的统计信息
[root@cnetos5 ~]# sar
[root@cnetos5 ~]# sar -u
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
12:10:01 AM       all      0.02      0.00      0.14      0.01      0.00     99.84
12:20:01 AM       all      0.02      0.00      0.12      0.01      0.00     99.86
12:30:01 AM       all      0.01      0.00      0.12      0.01      0.00     99.86
Average:          all      0.03      0.00      0.13      0.01      0.00     99.84
输出项说明:
CPU  all 表示统计信息为所有 CPU 的平均值。
%user  显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice  显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system  在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait  显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal  管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle  显示 CPU 空闲时间占用 CPU 总时间的百分比。



若 %iowait 的值过高,表示硬盘存在I/O瓶颈
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。



2、显示I/O和传送速率的统计信息
[root@cnetos5 ~]# sar -b
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM       tps      rtps      wtps   bread/s   bwrtn/s
12:10:01 AM      1.58      0.00      1.58      0.00     16.71
12:20:01 AM      1.09      0.00      1.09      0.00     10.85
12:30:01 AM      1.08      0.00      1.08      0.00     10.74
Average:         1.24      0.00      1.24      0.00     12.70
输出项说明:
tps  每秒钟物理设备的 I/O 传输总量
rtps  每秒钟从物理设备读入的数据总量
wtps  每秒钟向物理设备写入的数据总量
bread/s  每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s  每秒钟向物理设备写入的数据量,单位为 块/s
3、输出内存页面的统计信息
[root@cnetos5 ~]# sar -B
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM  pgpgin/s pgpgout/s   fault/s  majflt/s
12:10:01 AM      0.00      4.17      9.74      0.00
12:20:01 AM      0.00      2.71      2.24      0.00
12:30:01 AM      0.00      2.69      2.25      0.00
Average:         0.00      3.17      4.07      0.00
输出项说明:
pgpgin/s  每秒钟从磁盘读入的系统页面的 KB 总数
pgpgout/s  每秒钟向磁盘写出的系统页面的 KB 总数
fault/s  系统每秒产生的页面失效(major + minor)数量
majflt/s  系统每秒产生的页面失效(major)数量
4、输出每秒创建的进程数的进程统计信息
[root@cnetos5 ~]# sar -c
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM    proc/s
12:10:01 AM      0.05
12:20:01 AM      0.03
12:30:01 AM      0.03
Average:         0.03
输出项说明:
proc/s  每秒钟创建的进程数
5、输出网络设备状态的统计信息
[root@cnetos5 ~]# sar -n DEV |grep eth0
12:00:01 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
12:10:01 AM      eth0      0.59      0.92     41.57    893.98      0.00      0.00      0.00
12:20:01 AM      eth0      0.55      0.88     37.50    859.56      0.00      0.00      0.00
12:30:01 AM      eth0      0.55      0.86     38.17    871.98      0.00      0.00      0.00
Average:         eth0      0.29      0.42     21.05    379.29      0.00      0.00      0.00
输出项说明:
IFACE  网络设备名
rxpck/s  每秒接收的包总数
txpck/s  每秒传输的包总数
rxbyt/s  每秒接收的字节(byte)总数
txbyt/s  每秒传输的字节(byte)总数
rxcmp/s  每秒接收压缩包的总数
txcmp/s  每秒传输压缩包的总数
rxmcst/s  每秒接收的多播(multicast)包的总数
6、输出网络设备状态的统计信息(查看网络设备故障)
[root@cnetos5 ~]# sar -n EDEV |egrep 'eth0|IFACE'
12:00:01 AM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
12:10:01 AM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:20:01 AM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:30:01 AM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
输出项说明:
IFACE  网络设备名
rxerr/s  每秒接收的坏包总数
txerr/s  传输包时每秒发生错误的总数
coll/s  传输包时每秒发生冲突(collision)的总数
rxdrop/s  接收包时,由于缺乏缓存,每秒丢弃(drop)包的数量
txdrop/s  传输包时,由于缺乏缓存,每秒丢弃(drop)包的数量
txcarr/s  传输包时,每秒发生的传输错误(carrier-error)的数量
rxfram/s  接收包时,每秒发生帧校验错误(frame alignment error)的数量
rxfifo/s  接收包时,每秒发生队列(FIFO)一出错误的数量
txfifo/s  传输包时,每秒发生队列(FIFO)一出错误的数量
7、输出进程队列长度和平均负载状态统计信息
[root@cnetos5 ~]# sar -q
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
12:10:01 AM         0        85      0.02      0.01      0.00
12:20:01 AM         0        85      0.01      0.00      0.00
12:30:01 AM         0        85      0.03      0.01      0.00
Average:            0        85      0.01      0.00      0.00
输出项说明:
runq-sz  运行队列的长度(等待运行的进程数)
plist-sz  进程列表中进程(processes)和线程(threads)的数量
ldavg-1  最后1分钟的系统平均负载(System load average)
ldavg-5  过去5分钟的系统平均负载
ldavg-15  过去15分钟的系统平均负载
8、输出内存和交换空间的统计信息
[root@cnetos5 ~]# sar -r
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
12:10:01 AM    262068    253408     49.16     43884    156456   1048568         0      0.00         0
12:20:01 AM    261572    253904     49.26     44580    156448   1048568         0      0.00         0
12:30:01 AM    260704    254772     49.42     45124    156472   1048568         0      0.00         0
Average:       259551    255925     49.65     46453    156470   1048568         0      0.00         0
输出项说明:
kbmemfree  可用的空闲内存数量,单位为 KB
kbmemused  已使用的内存数量(不包含内核使用的内存),单位为 KB
%memused  已使用内存的百分数
kbbuffers  内核缓冲区(buffer)使用的内存数量,单位为 KB
kbcached  内核高速缓存(cache)数据使用的内存数量,单位为 KB
kbswpfree  可用的空闲交换空间数量,单位为 KB
kbswpused  已使用的交换空间数量,单位为 KB
%swpused  已使用交换空间的百分数
kbswpcad  交换空间的高速缓存使用的内存数量
9、输出内存页面的统计信息
[root@cnetos5 ~]# sar -R
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM   frmpg/s   bufpg/s   campg/s
12:10:01 AM     -0.10      0.23      0.01
12:20:01 AM     -0.21      0.29     -0.00
12:30:01 AM     -0.36      0.23      0.01
Average:        -0.21      0.22      0.00
输出项说明:
frmpg/s  每秒系统中空闲的内存页面(memory page freed)数量
bufpg/s  每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量
campg/s  每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量
10、输出inode、文件和其他内核表的信息
[root@cnetos5 ~]# sar -v
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM dentunusd   file-sz  inode-sz  super-sz %super-sz  dquot-sz %dquot-sz  rtsig-sz %rtsig-sz
12:10:01 AM      7253       576      5126         0      0.00         0      0.00         0      0.00
12:20:01 AM      7253       576      5126         0      0.00         0      0.00         0      0.00
12:30:01 AM      7253       576      5126         0      0.00         0      0.00         0      0.00
Average:         7253       589      5125         0      0.00         0      0.00         0      0.00
输出项说明:
dentunusd  目录高速缓存中未被使用的条目数量
file-sz  文件句柄(file handle)的使用数量
inode-sz  i节点句柄(inode handle)的使用数量
super-sz  由内核分配的超级块句柄(super block handle)数量
%super-sz  已分配的超级块句柄占总超级块句柄的百分比
dquot-sz  已经分配的磁盘限额条目数量
%dquot-sz  分配的磁盘限额条目数量占总磁盘限额条目的百分比
rtsig-sz  已排队的 RT 信号的数量
%rtsig-sz  已排队的 RT 信号占总 RT 信号的百分比
11、输出系统交换活动信息
[root@cnetos5 ~]# sar -w
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM   cswch/s
12:10:01 AM     44.74
12:20:01 AM     44.41
12:30:01 AM     44.41
Average:        44.50
输出项说明:
cswch/s  每秒的系统上下文切换数量
12、 输出系统交换的统计信息
[root@cnetos5 ~]# sar -W
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.00      0.00
12:20:01 AM      0.00      0.00
12:30:01 AM      0.00      0.00
Average:         0.00      0.00
输出项说明:
pswpin/s  每秒系统换入的交换页面(swap page)数量
pswpout/s  每秒系统换出的交换页面(swap page)数量
13、输出TTY设备的活动信息
[root@cnetos5 ~]# sar -y
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

12:00:01 AM       TTY   rcvin/s   xmtin/s framerr/s prtyerr/s     brk/s   ovrun/s
12:10:01 AM         0      0.00      0.00      0.00      0.00      0.00      0.00
12:10:01 AM         1      0.00      0.00      0.00      0.00      0.00      0.00
12:20:01 AM         0      0.00      0.00      0.00      0.00      0.00      0.00
12:20:01 AM         1      0.00      0.00      0.00      0.00      0.00      0.00
12:30:01 AM         0      0.00      0.00      0.00      0.00      0.00      0.00
12:30:01 AM         1      0.00      0.00      0.00      0.00      0.00      0.00
………………
Average:            0      0.00      0.00      0.00      0.00      0.00      0.00
Average:            1      0.00      0.00      0.00      0.00      0.00      0.00
输出项说明:
TTY  TTY 串行设备号
rcvin/s  每秒接收的中断数量
xmtin/s  每秒传送的中断数量
framerr/s  每秒发生的帧错误数(frame error)量
prtyerr/s  每秒发生的奇偶校验错误(parity error)数量
brk/s  每秒发生的暂停(break)数量
ovrun/s  每秒发生的溢出错误(overrun error)数量
14、显示全面的累计统计信息
# sar -A
15、默认配置不提供的累计统计信息
[root@cnetos5 ~]# sar -d
Requested activities not available in file
[root@cnetos5 ~]# sar -x ALL
Requested activities not available in file
[root@cnetos5 ~]# sar -X ALL
Requested activities not available in file



默认情况下,为了防止统计数据文件 /var/log/sa/saDD 迅速增大,/usr/lib/sa/sadc 没有记录每个块设备的统计信息。
可以在 -d -x -X 参数后添加取样参数获得即时统计信息。
带有 -x -X 选项的 sar 命令从来不能记录到二进制统计数据文件 。



查看即时统计信息
1、使用取样选项查看即时统计信息
例如:每30秒取样一次,连续取样5次
# sar -n DEV 30 5
# sar -u  30 5
2、输出和读取统计信息文件
例如:
# sar -u  30 5 -o sar-dump-001
# sar -u -f  sar-dump-001
3、输出每一个块设备的活动信息
# sar -dp 5 2
Linux 2.6.18-53.el5 (cnetos5)   01/22/2008

07:12:11 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:12:16 AM       sda      0.40      0.00     17.56     44.00      0.00      1.00      1.00      0.04
07:12:16 AM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

07:12:16 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:12:21 AM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:12:21 AM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sda      0.20      0.00      8.78     44.00      0.00      1.00      1.00      0.02
Average:          sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
输出项说明:
DEV  正在监视的块设备
tps  每秒钟物理设备的 I/O 传输总量
rd_sec/s  每秒从设备读取的扇区(sector)数量
wr_sec/s  每秒向设备写入的扇区(sector)数量
avgrq-sz  发给设备请求的平均扇区数
avgqu-sz  发给设备请求的平均队列长度
await  设备 I/O 请求的平均等待时间(单位为毫秒)
svctm  设备 I/O 请求的平均服务时间(单位为毫秒)
%util  在 I/O 请求发送到设备期间,占用 CPU 时间的百分比。用于体现设备的带宽利用率。



avgqu-sz 的值较低时,设备的利用率较高。
当 %util 的值接近 100% 时,表示设备带宽已经占满。



iostat 的命令格式

iostat 用于输出CPU和磁盘I/O相关的统计信息。命令格式为:
iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ]  | ALL ]
  [ -p [ device | ALL ] ] [ interval [ count ] ]
其中:
interval : 为取样时间间隔
count : 为输出次数,若指定了取样时间间隔且省略此项,将不断产生统计信息
常用选项:
选项 说明
-c  仅显示CPU统计信息。与-d选项互斥。
-d  仅显示磁盘统计信息。与-c选项互斥。
-k  以KB为单位显示每秒的磁盘请求数。默认单位块。
-m  以MB为单位显示每秒的磁盘请求数。默认单位块。
-p {device|ALL}  用于显示块设备及系统分区的统计信息。与-x选项互斥。
-t  在输出数据时,打印搜集数据的时间。
-V  打印版本号信息。
-x  输出扩展信息。
iostat 使用举例

下面给出几个例子:
# 显示一条包括所有的CPU和设备吞吐率的统计信息
# iostat
Linux 2.6.18-53.el5 (cnetos5)   01/21/2008

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.10    0.04    0.37    0.07    0.00   99.42

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               1.44        16.79        10.58     800430     504340
sdb               0.01         0.07         0.00       3314          8
sdc               0.86         8.56         0.00     407892         24

# 每隔5秒显示一次设备吞吐率的统计信息(单位为 块/s)
# iostat -d 5

# 每隔5秒显示一次设备吞吐率的统计信息(单位为 KB/s),共输出3次
# iostat -dk 5 3

# 每隔2秒显示一次 sda 及上面所有分区的统计信息,共输出5次
# iostat -p sda 2 5

# 每隔2秒显示一次 sda 和 sdb 两个设备的扩展统计信息,共输出6次
# iostat -x sda sdb 2 6
Linux 2.6.18-53.el5 (cnetos5)   01/21/2008

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.10    0.04    0.37    0.07    0.00   99.42

Device:     rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda           0.17     0.84  0.96  0.47    16.67    10.56    19.01     0.01    7.11   1.25   0.18
sdb           0.00     0.00  0.01  0.00     0.07     0.00     5.16     0.00    0.22   0.19   0.00

…………
iostat 的输出项说明

avg-cpu 部分输出项说明:
%user  在用户级别运行所使用的 CPU 的百分比。
%nice  nice 操作所使用的 CPU 的百分比。
%system  在核心级别(kernel)运行所使用 CPU 的百分比。
%iowait  CPU 等待硬件 I/O 所占用 CPU 的百分比。
%steal  当管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle  CPU 空闲时间的百分比。
Device 部分基本输出项说明:
tps  每秒钟物理设备的 I/O 传输总量。
Blk_read  读入的数据总量,单位为块。
Blk_wrtn  写入的数据总量,单位为块。
kB_read  读入的数据总量,单位为KB。
kB_wrtn  写入的数据总量,单位为KB。
MB_read  读入的数据总量,单位为MB。
MB_wrtn  写入的数据总量,单位为MB。
Blk_read/s  每秒从驱动器读入的数据量,单位为 块/s。
Blk_wrtn/s  每秒向驱动器写入的数据量,单位为 块/s。
kB_read/s  每秒从驱动器读入的数据量,单位为KB/s。
kB_wrtn/s  每秒向驱动器写入的数据量,单位为KB/s。
MB_read/s  每秒从驱动器读入的数据量,单位为MB/s。
MB_wrtn/s  每秒向驱动器写入的数据量,单位为MB/s。
Device 部分扩展输出项说明:
rrqm/s  将读入请求合并后,每秒发送到设备的读入请求数。
wrqm/s  将写入请求合并后,每秒发送到设备的写入请求数。
r/s  每秒发送到设备的读入请求数。
w/s  每秒发送到设备的写入请求数。
rsec/s  每秒从设备读入的扇区数。
wsec/s  每秒向设备写入的扇区数。
rkB/s  每秒从设备读入的数据量,单位为 KB/s。
wkB/s  每秒向设备写入的数据量,单位为 KB/s。
rMB/s  每秒从设备读入的数据量,单位为 MB/s。
wMB/s  每秒向设备写入的数据量,单位为 MB/s。
avgrq-sz  发送到设备的请求的平均大小,单位为扇区。
avgqu-sz  发送到设备的请求的平均队列长度。
await  I/O请求平均执行时间。包括发送请求和执行的时间。单位为毫秒。
svctm  发送到设备的I/O请求的平均执行时间。单位为毫秒。
%util  在I/O请求发送到设备期间,占用CPU时间的百分比。用于显示设备的带宽利用率。当这个值接近100%时,表示设备带宽已经占满。
mpstat

mpstat 的命令格式

mpstat 输出每一个 CPU 的运行状况,为多处理器系统中的 CPU 利用率提供统计信息。命令格式为:
mpstat [ -P { cpu | ALL } ] [ -V ] [ interval [ count ] ]
其中:
interval : 为取样时间间隔。指定0则输出自系统启动后的一个统计信息。
count : 为输出次数。若指定了取样时间间隔且省略此项,将不断产生统计信息。
常用选项:
选项 说明
-P {cpu|ALL}  指定 CPU。用 CPU-ID 指定,CPU-ID 是从0开始的,即第一个CPU为0。ALL 表示所有CPU。
-V  输出版本号信息。
mpstat 使用举例

下面给出几个例子:
# 输出所有 CPU 使用情况的统计信息。
# mpstat
Linux 2.6.18-53.el5 (cnetos5)   01/21/2008

10:39:06 AM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
10:39:06 AM  all    0.10    0.04    0.31    0.06    0.04    0.01    0.00   99.45   1012.99

# 输出第一个 CPU 使用情况的统计信息。
# mpstat -P 0
Linux 2.6.18-53.el5 (cnetos5)   01/21/2008

10:41:03 AM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
10:41:03 AM    0    0.09    0.02    0.40    0.09    0.08    0.01    0.00   99.32   1012.79

# 每隔2秒输出所有CPU的统计信息,共输出5次。
# mpstat 2 5

# 每隔2秒输出一次所有CPU的统计信息,共输出5次。
# mpstat -P ALL 2 5

# 每隔2秒输出一次第二个CPU的统计信息,共输出5次。
# mpstat -P 1 2 5
mpstat 输出项说明

CPU  在多CPU系统里,每个CPU有一个ID号,第一个CPU为0。all表示统计信息为所有CPU的平均值。
%user  显示在用户级别运行所占用CPU总时间的百分比。
%nice  显示在用户级别,用于nice操作,所占用CPU总时间的百分比。
%sys  显示在kernel级别运行所占用CPU总时间的百分比。注意:这个值并不包括服务中断和softirq。
%iowait  显示用于等待I/O操作时,占用CPU总时间的百分比。
%irq  显示用于中断操作,占用CPU总时间的百分比。
%soft  显示用于softirq操作,占用CPU总时间的百分比。
%steal  管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle  显示CPU在空闲状态,占用CPU总时间的百分比。
intr/s  显示CPU每秒接收到的中断总数。
分页: 2/9 第一页 上页 1 2 3 4 5 6 7 8 9 下页 最后页 [ 显示模式: 摘要 | 列表 ]