我在sysstat工具简介里简单对sysstat工具包进行了一下说明,这篇日志衔接上一篇。主要说明其所包含的工具sadc、sdaf、sar、iostat、mpstat的用法。

一、sadc工具

sadc 位于 /usr/lib/sa目录中(64位系统在:/usr/lib64/sa目录中),如果你没有设置可执行路径,要用绝对路径来运行。sdac准备的说只是一个搜集写入工具,并不直接回显于屏幕上。sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示。

1# /usr/lib64/sa/sadc --help
2Usage: /usr/lib64/sa/sadc [ options... ] [ <interval> [ <count> ] ] [ <outfile> ]
3Options are:
4[ -d ] [ -F ] [ -I ] [ -V ]

参数说明:

  • -d 报告硬盘设置的相关统计;
  • -F 强制把数据写入文件;
  • -I 报告所有系统中断数据;
  • interval 表示时间间隔,单位是秒,比如3 ;
  • count 统计数据的次数,也是一个数字;
  • outfile 输出统计到outfile文件;

注意: 此工具中的参数都是可选的,如果没有指定任何参数,比如 /usr/lib/sa/sadc - (后面的“-”是必须的,少了会出乱码和报错),则会输出数据到 /var/log/sa/ 目录下的一个文件中。要通过sadf 或sar工具来查看。

1[root@localhost test]# /usr/lib/sa/sadc -
2[root@localhost test]# ls /var/log/sa 注:列出所有sa目录下的文件,根据文件的时间来判断哪个文件是最新的;
3[root@localhost test]# sar -f /var/log/sa/sa11
4或 sadf /var/log/sa/sa11
5[root@localhost ~]# /usr/lib/sa/sadc  1 10 sa000  表示每1秒进行一次数据统计,共进行10次。
6[root@localhost ~]# sar -f sa000

二、sadf工具

sdaf 能从二进制文件中提取sar所收集的数据;显示的格式不如sar直观。(不能就此认为该工具没有用,其主要用于导出为csv、xml等格式的文件,方便导入数据库或excel等程序。)官方给出的说明这样的:

displays data collected by sar in multiple formats (CSV, XML, etc.) This is useful to load performance data into a database, or import them in a spreadsheet to make graphs.

sadf

上图是一个以sdaf导出的csv格式,通过excel生成的图表效果。具体用法,可以–help或man查看。

三、sar工具

sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;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就是读取 /var/log/sa目录下最近系统状态文件。sar -A 读取/var/log/sa目录下所有文件数据。

应用举例:

1、如果我们想知道CPU的利用率;动态更新;下面的例子是每秒更新一次数据,总共更新五次;

1[root@web20 sa]# sar -u  1 5
2Linux 2.6.18-238.el5 (web20.com)        2012年06月11日
316时30分44秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
416时30分45秒       all      0.00      0.00      0.00      0.00      0.00    100.00
516时30分46秒       all      0.00      0.00      0.00      0.00      0.00    100.00
616时30分47秒       all      0.00      0.00      0.00      0.00      0.00    100.00
716时30分48秒       all      0.00      0.00      0.00      0.00      0.00    100.00
816时30分49秒       all      0.00      0.00      0.00      0.00      0.00    100.00
9Average:          all      0.00      0.00      0.00      0.00      0.00    100.00
  • CPU:表示机器内所有的CPU;
  • %user 表示CPU的利用率;
  • %nice 表示CPU在用户层优先级的百分比,0表示正常;
  • %system
  • 表示当系统运行时,在用户应用层上所占用的CPU百分比;
  • %iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比;
  • %idle 表示空闲CPU百分比,值越大系统负载越低;

我们可以将上面的结果输出到文本,或者利用sar本身的-o参数输出为二进制文件。(输出的二进制文件可以通过-f参数查看)

2、查看网络吞吐量

1[root@localhost ~]# sar -n DEV 2 5    //每2秒更新一数据,共更新5次
2时间 IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s

上面的结果部分我并未复制过来。这里只是显示所显示的参数部分,其具体意思如下:

  • IFACE:设备名;
  • rxpck/s:每秒收到的包;
  • rxbyt/s:每秒收到的所有包的数量 ;
  • txbyt/s:每秒发送的所有包的数量 ;
  • txbyt/s:每秒发送的所有包的大小;
  • rxcmp/s:每秒收到数的据压缩包的数量;
  • txcmp/s :每秒传输的数据压缩包的数据;
  • rxmcst/s: 每秒收到的多播的包数量;

如果想获取某块网卡的流量情况,我们可以使用grep过滤。

四、iostat

iostat 是sysstat包中重要性仅次于sar工具的又一重量级工具。其参数也比较多。其可以搜集CPU使用情况、磁盘IO状态。

1Usage: iostat [ options... ] [ <interval> [ <count> ] ] //iostat 参数   间隔时间  总显示次数

参数说明

  • -c : 仅显示cpu的状态
  • -d : 仅显示存储设备的状态,不可以和-c一起使用
  • -k : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示
  • -t  : 显示日期
  • -p device | ALL :
  • device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息
  • -x 显示扩展状态,显示出更多内容
1[root@web20 sa]# iostat -x
2Linux 2.6.18-238.el5 (web20.com)        2012年06月11日
3avg-cpu:  %user   %nice %system %iowait  %steal   %idle
4           0.04    0.02    0.06    0.14    0.00   99.74
5Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

上面结果部分我进行了省略。我们主要讲下其给出的几个参数:

  • rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
  • wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
  • r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
  • w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
  • rsec/s: 每秒读扇区数。即 delta(rsect)/s
  • wsec/s: 每秒写扇区数。即 delta(wsect)/s
  • rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
  • wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)
  • avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
  • avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
  • await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
  • svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
  • %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。 idle小于70% IO压力就较大了,一般读取速度有较多的wait.

五、mpstat

mpstat 用于多处理器系统中的CPU的利用率的统计。细化到具体某个cpu的状态时可以使用参数-p,处理器的ID从0开始。这个和top中按1的效果相同。

1mpstat --help
2Usage: mpstat [ options... ] [ <interval> [ <count> ] ]
3Options are:
4[ -P { <cpu> | ALL } ] [ -V ]
5
6[root@localhost ~]# mpstat -P 0 2 10    //查看第一个CPU
7[root@localhost ~]# mpstat 2 10          //查看所有CPU,也可以使用-p ALL
8Linux 2.6.18-238.el5 (web20.sangame.com)        2012年06月12日
910时03分37秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

同样,上面的显示中,我也省略了结果,只保留了参数。其中几个主要的参数的含义如下:

  • %user    显示在用户级别(application)运行使用 CPU 总时间的百分比。
  • %nice    显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
  • %system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
  • %iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
  • %irq  显示在interval时间段内,硬中断占用的CPU总时间。
  • %soft  显示在interval时间段内,软中断占用的CPU总时间。
  • %steal   管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
  • %idle    显示 CPU 空闲时间占用CPU总时间的百分比。
  • intr/s 在internal时间段里,每秒CPU接收的中断的次数。

其计算理论如下:

1CPU总的工作时间=total_cur=user+system+nice+idle+iowait+irq+softirq
2total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
3user=user_cur–user_pre
4total=total_cur-total_pre

其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点。

注:mpstat的取值来自于/proc/stat文件。该文件的几个参数解析如下:

  • ctxt: 给出了自系统启动以来CPU发生的上下文交换的次数。 
  • btime: 给出了从系统启动到现在为止的时间,单位为秒。 
  • processes (total_forks): 自系统启动以来所创建的任务的个数目。 
  • procs_running:当前运行队列的任务的数目。 
  • procs_blocked:当前被阻塞的任务的数目。

至此,sysstat的讲解差不多算做了一个完结,不过最新的sysstat包中还另外包含的工具有pidstat、nfsiostat、cifsiostat。具体可以参看其官方文档 —— http://sebastien.godard.pagesperso-orange.fr/documentation.html 。