Total Pageviews

Sunday 4 March 2012

linux系统的状态查看工具Sysstat

摘要:本文讲述的是系统状态查看工具Sysstat的介绍,重点介绍了Sysstat的工具集sar、 iostat、mpstat、sadf、sar、sadc的用法;同时也把与之相似工具做以介绍;
目录

+++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++

1、关于 Sysstat;
Sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手;

Sysstat 软件包集成如下工具:
    * iostat 工具提供CPU使用率及硬盘吞吐效率的数据;
    * mpstat 工具提供单个处理器或多个处理器相关数据;
    * sar 工具负责收集、报告并存储系统活跃的信息;
    * sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行,
        是为sadc所设计的程序前端程序;
    * sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ,要通过cron来调用
    * sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;
    * sadf 显示被sar通过多种格式收集的数据;

2、安装 Sysstat和运行;
对于大多数系统,都有这个软件包,软件名以sysstat开头。我们可以通过网络安装它;

2.1 对于Debian或deb软件包为基础的系统;
[root@localhost ~]# apt-get install sysstat

2.2 Fedora 系统或以RPM包管理的系统;
[root@localhost ~]# yum   install sysstat
如果是RPM包,请用下面的命令来安装;
[root@localhost ~]#rpm -ivh sysstat*.rpm  
如果您想了解yum 和rpm 软件包管理工具,请参考:《Fedora / Redhat 软件包管理指南》

2.3 Slackware 系统,对于Slackware系统;
[root@localhost ~]# installpkg sysstat*.pkg

2.4 通过源码包编译安装;
如果您是通过源码包安装,请到官方下源源码包 http://perso.wanadoo.fr/sebastien.godard,目前最新版本是 sysstat-6.1.2;
如果您想了想一下什么是源码包,请参考:《如何编译安装源码包软件》
[root@localhost ~]# tar zxvf sysstat-6.1.2.tar.gz
[beinan@localhost ~]$ cd sysstat-6.1.2
[beinan@localhost sysstat-6.1.2]#
[beinan@localhost sysstat-6.1.2]# make config
[beinan@localhost sysstat-6.1.2]# make
[beinan@localhost sysstat-6.1.2]# make install

2.5 关于 Sysstat 计划任务;
如果您想得到Sysstat工具集所收集的系统信息自动存为某个文件中,你必须通过cron 为 sa1 和sa2 做计划任务。我们可以通过修改用户的crontab。在默认的情况下,Sysstat历史信息将被存放在/var/log/sa文件中。如果想定义自己的 计划任务,请参考:《计划任务工具 cron 的配置和说明》
在root用户,通过 crontab -e 来添加下面的一段;
# 8am-7pm activity reports every 10 minutes during weekdays
0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &
# 7pm-8am activity reports every hour during weekdays
0 19-7 * * 1-5 /usr/lib/sa/sa1 &
# Activity reports every hour on Saturday and Sunday
0 * * * 0,6 /usr/lib/sa/sa1 &
# Daily summary prepared at 19:05 5 19 * * * /usr/lib/sa/sa2 -A &
创建Sysstat的启动脚本;
[root@localhost ~]# touch  /etc/rc.d/init.d/sysstat 
[root@localhost ~]# vi /etc/rc.d/init.d/sysstat
#!/bin/sh
# Begin $rc_base/init.d/sysstat

# Based on sysklogd script from LFS-3.1 and earlier.
# Rewritten by Gerard Beekmans  - gerard@linuxfromscratch.org

. /etc/sysconfig/rc
. $rc_functions

case "$1" in
        start)
                echo "Calling the system activity data collector (sadc)..."
                /usr/lib/sa/sadc -F -L -
                evaluate_retval
                ;;
        *)
   
                echo "Usage: $0 start"
                exit 1
                ;;
esac

# End $rc_base/init.d/sysstat
[root@localhost ~]# chmod 755 /etc/rc.d/init.d/sysstat
[root@localhost ~]# ln -sf /etc/rc.d/init.d/sysstat /etc/init.d/sysstat
有了Sysstat的守护进程,这样我们开机后,Sysstat的守护进程,就时时刻刻的为我们服务了。sa 、sa1或sa2自动把信息存在 /var/log/sa目录的二进制文件中,我们可以通过sar工具来提取这些系统信息的历史;
当然我们也可以通过手动的方法来打开Sysstat的守护程序,也就是我们前面所制作的sysstat;
[root@localhost ~]# /etc/rc.d/init.d/sysstat start 

下面的方法也行; 

[root@localhost ~]# /usr/lib/sa/sa1
[root@localhost ~]# /usr/lib/sa/sa2

3.Sysstat 工具集介绍;

3.1 sadc 工具,
sadc 位于 /usr/lib/sa目录中,如果你没有设置可执行路径,要用绝对路径来运行比较方便 ,/usr/lib/sa/sadc;sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示;

sadc 的用法;
/usr/lib/sa/sadc [ -d ] [ -F ] [ -I ] [ -L ] [ -V ] [ interval [ count ] ] [ outfile ]
参数说明:
-d  报告硬盘设置的相关统计;
-F  强制把数据写入文件;
-I  报告所有系统中断数据;

interval 表示时间间隔,单位是秒,比如3 ;
count 统计数据的次数,也是一个数字;
outfile 输出统计到outfile文件;
注意:此工具中的参数都是可选的,如果没有指定任何参数,比如 /usr/lib/sa/sadc - ,则会输出数据到 /var/log/sa/ 目录下的一个文件中。我们要通过sadf 或sar工具来查看;
[root@localhost beinan]# /usr/lib/sa/sadc  - 
[root@localhost beinan]# ls /var/log/sa   注:列出所有sa目录下的文件,根据文件的时间来判断哪个文件是最新的;
[root@localhost beinan]# sar  -f  /var/log/sa/sa12



[root@localhost beinan]# sadf  /var/log/sa/sa12
举例:我们想把sadc收集到的数据写到一个指定的文件中;
[root@localhost ~]# /usr/lib/sa/sadc  1 10 sa000
[root@localhost ~]# sar -f sa000

Linux 2.6.15-1.2054_FC5 (localhost.localdomain)         2006年05月12日

09时15分30秒       CPU     %user     %nice   %system   %iowait     %idle
09时15分31秒       all      3.00      0.00      0.00      1.00     96.00
09时15分32秒       all      0.00      0.00      0.00      0.00    100.00
09时15分33秒       all      0.00      0.00      0.00      0.00    100.00
09时15分34秒       all      0.00      0.00      0.00      0.00    100.00
09时15分35秒       all      0.00      0.00      0.00      0.00    100.00
09时15分36秒       all      0.00      0.00      0.00      0.00    100.00
09时15分37秒       all      0.00      0.00      0.00      0.00    100.00
09时15分38秒       all      0.00      0.00      0.00      0.00    100.00
09时15分39秒       all      0.00      0.00      0.00      0.00    100.00
Average:          all      0.33      0.00      0.00      0.11     99.56

注解:我们用sadc 收集系统动态数据,让它收集1秒之内的10次动态信息; 然后通过sar 工具来查看系统的状态。也可以用 sadf 来查看所收集的数据,但不是太直观。您自己尝试一下看看。查看sa000文件,用 sadf sa000 ;

3.2 sar 工具;
sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行;
用法:
sar  [参数选项]
参数说明:
-A  显示所有历史数据,通过读取/var/log/sar 目录下的所有文件,并把它们分门别类的显示出来;
-b  通过设备的I/O中断读取设置的吞吐率;
-B 报告内存或虚拟内存交换统计;
-c 报告每秒创建的进程数;
-d 报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp 
-f 从一个二进制的数据文件中读取内容,比如 sar -f filename 
-i interval  指定数据收集的时间,时间单位是秒;
-n 分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
-o 把统计信息写入一个文件,比如  -o filename ;
-P 报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
-p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np 
-r 内存和交换区占用统计; 
-R
-t 这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
-u 报告CPU利用率的参数;
-v 报告inode, 文件或其它内核表的资源占用信息;
-w 报告系统交换活动的信息; 每少交换数据的个数;
-W 报告系统交换活动吞吐信息; 
-x 用于监视进程的,在其后要指定进程的PID值;
-X 用于监视进程的,但指定的应该是一个子进程ID;
sar 应用举例;
实例一: 如果只用sar 命令,sar就是读取 /var/log/sa目录下最近系统状态文件。
[root@localhost ~]# sar

[root@localhost ~]# sar -A  注:读取/var/log/sa目录下所有文件数据;
如果我们想知道CPU的利用率;动态更新;下面的例子是每秒更新一次数据,总共更新五次;
[root@localhost ~]# sar -u  1 5
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)         2006年05月12日

时间              CPU    利用率    nice值    系统占用    IO占用  空闲
11时19分34秒       CPU     %user     %nice   %system   %iowait     %idle
11时19分35秒       all      2.97      0.00      0.00      0.00     97.03
11时19分36秒       all     11.11      0.00      9.09      0.00     79.80
11时19分37秒       all     21.78      0.00      6.93      0.00     71.29
11时19分38秒       all     15.00      0.00      0.00      0.00     85.00
11时19分39秒       all      8.00      0.00      0.00      0.00     92.00
Average:          all     11.78      0.00      3.19      0.00     85.03
注解:
CPU:表示机器内所有的CPU;
%user 表示CPU的利用率;
%nice 表示CPU在用户层优先级的百分比,0表示正常;
%system 表示当系统运行时,在用户应用层上所占用的CPU百分比;
%iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比;
%idle 表示空闲CPU百分比,值越大系统负载越低;
您可以CPU利用率的动态信息输出到一个文本文件中,然后通过more 来查看。
[root@localhost ~]# sar -u  1 5 > sar000.txt 
[root@localhost ~]# more sar000.txt
也可以输出到一个二进制的文件中,然后通过sar来查看;
[root@localhost ~]# sar -u  1 5 -o sar002 
[root@localhost ~]# sar -f sar002
注:如果您把数据通过-o filename 输出到一个二进制的文件中,是不能用文件内容查看工具more 、less或cat来查看的,应该用sar工具来查看,要加-f参数;
实例二:查看网络设备的吞吐情况;
比如我们让数据每秒更新一次,总共更新十次;
[root@localhost ~]# sar -n DEV  2 5
时间     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
第一字段:时间;
IFACE:设备名;
rxpck/s:每秒收到的包;
rxbyt/s:每秒收到的所有包的体积;
txbyt/s:每秒传输的所有包的体积;
rxcmp/s:每秒收到数据切割压缩的包总数;
txcmp/s :每秒传输的数据切割压缩的包的总数;
rxmcst/s: 每秒收到的多点传送的包;
如果我们从事提取eth0设备(也就是网卡eth0)的信息;我们应该用grep 来过滤。然后再显示出来;
[root@localhost ~]# sar -n DEV  2  5  |grep eth0
11时52分37秒      eth0  1.00  1.00   97.51   97.51   0.00    0.00      0.00
11时52分39秒      eth0  1.01  1.01   98.49   98.49   0.00    0.00      0.00
11时52分41秒      eth0  1.00  1.00   98.00   98.00   0.00    0.00      0.00
11时52分43秒      eth0  1.00  1.00   98.00   98.00   0.00    0.00      0.00
11时52分45秒      eth0  1.00  1.00   98.00   98.00   0.00    0.00      0.00
Average:   eth0   1.00  1.00  98.00   98.00   0.00    0.00      0.00
如果想知道网络设备错误报告,也就就是用来查看设备故障的。应该用EDEV;比如下面的例子;
[root@localhost ~]# sar -n EDEV  2 5

3.3 iostat
iostat 是用来显示 系统即时系统,比如CPU使用率,硬盘设备的吞吐率;
[root@localhost ~]# iostat
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)   2006年05月12日

avg-cpu:  %user   %nice %system %iowait   %idle
           7.24    0.00    0.99    0.35   91.43

Device:   tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda      1.46        28.43        21.43     710589     535680

3.4 mpstat
mpstat 提供多处理器系统中的CPU的利用率的统计;mpstat 也可以加参数,用-P来指定哪个 CPU,处理器的ID是从0开始的。下面的例子是查看两个处理器,每二秒数据更新一次,总共要显示10次数据;
[root@localhost ~]# mpstat -P 0 2 10  注:查看第一个CPU
[root@localhost ~]# mpstat -p 1 2 10  注:查看第二个CPU
</code >

<code>
[root@localhost ~]# mpstat 2 10  注:查看所有CPU;

3.5 sdaf
sdaf 能从二进制文件中提取sar所收集的数据;这个大家知道就行了。显示的并不是友好的格式;
[root@localhost ~]# sar -u 2 5 -o sar003
[root@localhost ~]# sadf  sar003
相对来说,用sar来读取输出文件的内容更好;比如下面的;
[root@localhost ~]# sar -f sar003

4、 与Sysstat相似工具;

4.1 进程管理工具;
进程管理工具,包括ps 、pgrep、top、kill 、killall、pkill 等,请参考 《 Linux 进程管理》

4.2 内存使用率查看工具;
内存使用量 free
free 工具既能查看物理内存,也能查看虚拟内存的用量;
[root@localhost ~]# free
如果显示以单位M,则加-m参数;
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           724        713         11          0         24        290
-/+ buffers/cache:        398        326
Swap:          800          0        800

vmstat 即时显示内存工具;
vmstat 是一个即时显示内存使用情况的工具;
vmstat 使用方法:
vmstat [-V] [-n] [delay [count]]
              -V 显示vmstat的版本;
              -n causes the headers not to be reprinted regularly.
              -a 显示所有激活和未激活内存的状态;print inactive/active page stats.
              -d 显示硬盘统计信息;prints disk statistics
              -D 显示硬盘分区表;prints disk table
              -p 显示硬盘分区读写状态等;prints disk partition statistics
              -s 显示内存使用情况;prints vm table
              -m prints slabinfo
              -S 定义单位,k K 
              delay 是两次刷新时间间隔;
              单位体积: k:1000 K:1024 m:1000000 M:1048576 (默认是 K)
              count 刷新次数;
 --------------------------------------------------------------------------------------------
内容提要

  1. 了解 sysstat 工具包的组成
  2. 理解 sar 累计工作方式的配置
  3. 掌握 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 系统的默认设置中,以如下的方式使用这三个工具:
  1. 在守护进程 /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 这样的行信息。
  2. 在 cron 任务 /etc/cron.d/sysstat 中每隔10分钟执行一次 /usr/lib/sa/sa1 1 1 命令,将信息写入文件 /var/log/sa/saDD
  3. 在 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 总时间的百分比。
  1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
  2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
  3. 若 %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
  1. 默认情况下,为了防止统计数据文件 /var/log/sa/saDD 迅速增大,/usr/lib/sa/sadc 没有记录每个块设备的统计信息。
  2. 可以在 -d -x -X 参数后添加取样参数获得即时统计信息。
  3. 带有 -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 时间的百分比。用于体现设备的带宽利用率。
  1. avgqu-sz 的值较低时,设备的利用率较高。
  2. 当 %util 的值接近 100% 时,表示设备带宽已经占满。
要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如:
  • 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看
  • 怀疑内存存在瓶颈,可用 sar -Bsar -r 和 sar -W 等来查看
  • 怀疑I/O存在瓶颈,可用 sar -bsar -u 和 sar -d 等来查看


    iostat

    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每秒接收到的中断总数

No comments:

Post a Comment