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 是 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 ] ]
其中:
常用选项:
选项 说明
-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
read more