Linux下sysstat工具学习

    Linux下,我们多用ssh链接服务器远程操控。对于系统的监控必不可少,sysstat很不错的监控工具包。

sysstat官网:http://sebastien.godard.pagesperso-orange.fr/

sysstat托管代码:https://github.com/sysstat/sysstat

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

sysstat工具包包含工具:

◆iostat 工具提供CPU使用率及硬盘吞吐效率的数据;  #比较核心的工具

◆mpstat 工具提供单个处理器或多个处理器相关数据;

◆pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息

◆sar 工具负责收集、报告并存储系统活跃的信息;     #统计数据的核心工具

◆sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行,是为sadc所设计的程序前端程序;

◆sa2工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ,要通过cron来调用

◆sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;

◆sadf 显示被sar通过多种格式收集的数据;

◆nfsiostat: NFS(Network File System)的I/O统计信息。

◆cifsiostat: CIFS(Common Internet File System)的统计信息

   目前主流的linux系统里都自带有sysstat的集成包,在常用的centos/redhat平台下我们可以通过下列命令安装:

yum -y install sysstat

在Debian、ubuntu或deb软件包为基础的系统下,我们可以通过:

apt-get install sysstat

当然,我们也可以通过源码包安装。可以通过rpm -ql  sysstat命令查看具体所安装的文件和位置:

复制代码
[root@jiao ~]# rpm -ql sysstat
/etc/cron.d/sysstat        #计划任务
/etc/rc.d/init.d/sysstat   
/etc/sysconfig/sysstat
/etc/sysconfig/sysstat.ioconf
/usr/bin/cifsiostat        #网络文件统计
/usr/bin/iostat
/usr/bin/mpstat         
/usr/bin/pidstat    
/usr/bin/sadf
/usr/bin/sar
/usr/lib64/sa
/usr/lib64/sa/sa1
/usr/lib64/sa/sa2
/usr/lib64/sa/sadc       #数据写入

中间省略

 /var/log/sa           #默认统计信息保存的位置
复制代码

查看命令的参数:  xxx --help

[ <interval> [ <count> ] ] [ <outfile> ]

    间隔 s          次数                 输出文件

01、iostat


[root@jiao ~]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]   
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

参数释义:

-c : 仅显示cpu的状态
-d : 仅显示存储设备的状态,不可以和-c一起使用
-k :默认显示的是读入读出的block信息,用-k可以改成KB大小来显示 -m
-t  : 显示日期
-p device | ALL :
device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息
-x 显示扩展状态,显示出更多内容

exp

[root@jiao ~]# iostat -x Linux 2.6.32-431.el6.x86_64 (jiao)  09/30/2016  _x86_64_ (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle            0.08    0.00    0.26    0.53    0.00   99.13

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util sda              

                         4.04     0.56    1.52    0.35    66.17     7.30    39.34     0.05   25.43   3.41   0.64

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.  #CPU空闲等待时间

02、mpstat


mpstat 用于多处理器系统中的CPU的利用率的统计。细化到具体某个cpu的状态时可以使用参数-P,处理器的ID从0开始

[root@jiao ~]# mpstat --help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -I { SUM | CPU | ALL } ] [ -u ]
[ -P { <cpu> [,...] | ON | ALL } ] [ -V ]

复制代码
[root@jiao ~]# mpstat -P 0 1 3
Linux 2.6.32-431.el6.x86_64 (jiao)     09/30/2016     _x86_64_    (1 CPU)

03:35:38 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:35:39 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:35:40 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:35:41 AM    0    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00   99.01
Average:       0    0.00    0.00    0.33    0.00    0.00    0.00    0.00    0.00   99.67
复制代码

%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接收的中断的次数。

03、pidstat


[root@jiao ~]# pidstat --help
Usage: pidstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -C <command> ] [ -d ] [ -h ] [ -I ] [ -l ] [ -r ] [ -t ] [ -u ] [ -V ] [ -w ]
[ -p { <pid> [,...] | SELF | ALL } ] [ -T { TASK | CHILD | ALL } ]

复制代码
[root@jiao ~]# pidstat -dl
Linux 2.6.32-431.el6.x86_64 (jiao)     09/30/2016     _x86_64_    (1 CPU)

03:40:26 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
03:40:26 AM         1     19.83      1.96      0.01  /sbin/init 
03:40:26 AM       242      0.00      0.23      0.00  jbd2/sda5-8
03:40:26 AM       313      2.10      0.00      0.00  /sbin/udevd -d 
03:40:26 AM       552      0.12      0.00      0.00  /sbin/udevd -d 
03:40:26 AM       563      0.11      0.00      0.00  /sbin/udevd -d 
03:40:26 AM       823      0.00      0.03      0.00  auditd 
03:40:26 AM       839      0.12      0.05      0.00  /sbin/rsyslogd -i /var/run/syslogd.pid -c 5 
03:40:26 AM       883      0.00      0.00      0.00  /usr/sbin/sshd 
03:40:26 AM       960      0.20      0.00      0.00  /usr/libexec/postfix/master 
03:40:26 AM       968      0.07      0.00      0.00  pickup -l -t fifo -u 
03:40:26 AM       969      0.10      0.00      0.00  qmgr -l -t fifo -u 
03:40:26 AM       970      0.05      0.01      0.00  crond 
03:40:26 AM       983      0.01      0.00      0.00  /sbin/mingetty /dev/tty1 
03:40:26 AM       985      0.00      0.00      0.00  /sbin/mingetty /dev/tty2 
03:40:26 AM       994      0.10      0.00      0.00  sshd: root@pts/0  
03:40:26 AM       996      0.13      0.00      0.00  -bash 
03:40:26 AM      1025      0.04      0.01      0.00  /usr/sbin/anacron -s 
复制代码


04、sabc


    sadc 位于 /usr/lib/sa目录中,64位系统在:/usr/lib64/sa目录中,如果你没有设置可执行路径,要用绝对路径来运行。

sdac准备的说只是一个搜集写入工具,并不直接回显于屏幕上。sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示。

[root@jiao ~]# /usr/lib64/sa/sadc --help
Usage: /usr/lib64/sa/sadc [ options ] [ <interval> [ <count> ] ] [ <outfile> ]
Options are:
[ -C <comment> ] [ -F ] [ -L ] [ -V ]
[ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ]

注意:此工具中的参数都是可选的,如果没有指定任何参数

比如 /usr/lib64/sa/sadc - (后面的“-”是必须的,少了会出乱码和报错),则会输出数据到 /var/log/sa/目录下的一个文件中。

要通过sadf 或sar工具来查看。

复制代码
[root@jiao ~]# /usr/lib64/sa/sadc -
[root@jiao ~]# ll /var/log/sa/
total 40
-rw-r--r-- 1 root root 34472 Sep 30 03:50 sa30
[root@jiao ~]# sadf /var/log/sa/sa30
jiao    599    1475167801    all    %user    0.01
jiao    599    1475167801    all    %nice    0.00
jiao    599    1475167801    all    %system    0.07
jiao    599    1475167801    all    %iowait    0.02
jiao    599    1475167801    all    %steal    0.00
jiao    599    1475167801    all    %idle    99.90
jiao    -1    1475168236    LINUX-RESTART
jiao    600    1475169001    all    %user    0.01
jiao    600    1475169001    all    %nice    0.00
jiao    600    1475169001    all    %system    0.10
jiao    600    1475169001    all    %iowait    0.04
jiao    600    1475169001    all    %steal    0.00
jiao    600    1475169001    all    %idle    99.85
jiao    599    1475169601    all    %user    0.01
jiao    599    1475169601    all    %nice    0.00
jiao    599    1475169601    all    %system    0.06
jiao    599    1475169601    all    %iowait    0.00
jiao    599    1475169601    all    %steal    0.00
jiao    599    1475169601    all    %idle    99.93
复制代码

05、sadf


    sdaf 能从二进制文件中提取sar所收集的数据;显示的格式不如sar直观,其主要用于导出为csv、xml等格式的文件,方便导入数据库或excel等程序.

[root@jiao ~]# sadf --help
Usage: sadf [ options ] [ <interval> [ <count> ] ] [ <datafile> ]
Options are:
[ -d | -D | -H | -p | -x ] [ -h ] [ -t ] [ -V ]
[ -P { <cpu> [,...] | ALL } ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
[ -- <sar_options> ]

06、sar


      sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行。

复制代码
[root@jiao ~]# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ] [ --legacy ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
复制代码

参数说明:

-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目录下所有文件数据。

sar -u 1 3

复制代码
[root@jiao ~]# sar -u 1 3    #sar -u 1 3 -o cpu.dat   #sar -f cpu.dat 查看信息
Linux 2.6.32-431.el6.x86_64 (jiao)     09/30/2016     _x86_64_    (1 CPU)

04:03:00 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:03:01 AM     all      0.00      0.00      1.00      0.00      0.00     99.00
04:03:02 AM     all      0.00      1.01      2.02      5.05      0.00     91.92
04:03:03 AM     all      0.00      0.00      2.00      0.00      0.00     98.00
Average:        all      0.00      0.33      1.67      1.67      0.00     96.32
复制代码

sar -n DEV 2 4  #查看网络设备的网络吞吐量

复制代码
[root@jiao ~]# sar -n DEV 2 4
Linux 2.6.32-431.el6.x86_64 (jiao)     09/30/2016     _x86_64_    (1 CPU)

04:06:58 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:07:00 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:07:00 AM      eth0      0.50      0.00      0.03      0.00      0.00      0.00      0.00

04:07:00 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:07:02 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:07:02 AM      eth0      0.50      0.50      0.03      0.19      0.00      0.00      0.00

04:07:02 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:07:04 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:07:04 AM      eth0      0.50      0.50      0.03      0.19      0.00      0.00      0.00

04:07:04 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:07:06 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:07:06 AM      eth0      0.50      0.50      0.03      0.19      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0      0.50      0.38      0.03      0.14      0.00      0.00      0.00
复制代码

参数释义:

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

想获取某块网卡的流量情况,我们可以使用grep过滤。  #sar -n DEV 2 4 | grep eth0

 sar -b 1 4

复制代码
[root@jiao ~]# sar -b 1 4
Linux 2.6.32-431.el6.x86_64 (jiao)     09/30/2016     _x86_64_    (1 CPU)

04:11:30 AM       tps      rtps      wtps   bread/s   bwrtn/s
04:11:31 AM      0.00      0.00      0.00      0.00      0.00
04:11:32 AM      0.00      0.00      0.00      0.00      0.00
04:11:33 AM      0.00      0.00      0.00      0.00      0.00
04:11:34 AM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00
复制代码

引荐:http://www.361way.com/sysstat/1508.html

猜你喜欢

转载自www.cnblogs.com/guanzelin/p/11230649.html