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