sysstat 工具详细说明(一)
sysstat 工具
内容提要
- 了解 sysstat 工具包的组成
- 理解 sar 累计工作方式的配置
- 掌握 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 系统的默认设置中,以如下的方式使用这三个工具:
- 在守护进程 /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 的命令格式为:
interval : 为取样时间间隔
- 在守护进程 /etc/rc.d/init.d/sysstat 中使用?
- 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:00sar 使用举例
从 /var/log/sa/saDD 中读取累计统计信息
1、输出CPU使用情况的统计信息
CPUall 表示统计信息为所有 CPU 的平均值。%user显示在用户级别(application)运行使用 CPU 总时间的百分比。%nice显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。%system在核心级别(kernel)运行所使用 CPU 总时间的百分比。%iowait显示用于等待I/O操作占用 CPU 总时间的百分比。%steal管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。%idle显示 CPU 空闲时间占用 CPU 总时间的百分比。
?
?
?
- 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
- 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
- 若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
?
?
?
2、显示I/O和传送速率的统计信息
tps每秒钟物理设备的 I/O 传输总量rtps每秒钟从物理设备读入的数据总量wtps每秒钟向物理设备写入的数据总量bread/s每秒钟从物理设备读入的数据量,单位为 块/sbwrtn/s每秒钟向物理设备写入的数据量,单位为 块/s
3、输出内存页面的统计信息
pgpgin/s每秒钟从磁盘读入的系统页面的 KB 总数pgpgout/s每秒钟向磁盘写出的系统页面的 KB 总数fault/s系统每秒产生的页面失效(major + minor)数量majflt/s系统每秒产生的页面失效(major)数量
4、输出每秒创建的进程数的进程统计信息
proc/s每秒钟创建的进程数
5、输出网络设备状态的统计信息
IFACE网络设备名rxpck/s每秒接收的包总数txpck/s每秒传输的包总数rxbyt/s每秒接收的字节(byte)总数txbyt/s每秒传输的字节(byte)总数rxcmp/s每秒接收压缩包的总数txcmp/s每秒传输压缩包的总数rxmcst/s每秒接收的多播(multicast)包的总数
6、输出网络设备状态的统计信息(查看网络设备故障)
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、输出进程队列长度和平均负载状态统计信息
runq-sz运行队列的长度(等待运行的进程数)plist-sz进程列表中进程(processes)和线程(threads)的数量ldavg-1最后1分钟的系统平均负载(System load average)ldavg-5过去5分钟的系统平均负载ldavg-15过去15分钟的系统平均负载
8、输出内存和交换空间的统计信息
kbmemfree可用的空闲内存数量,单位为 KBkbmemused已使用的内存数量(不包含内核使用的内存),单位为 KB%memused已使用内存的百分数kbbuffers内核缓冲区(buffer)使用的内存数量,单位为 KBkbcached内核高速缓存(cache)数据使用的内存数量,单位为 KBkbswpfree可用的空闲交换空间数量,单位为 KBkbswpused已使用的交换空间数量,单位为 KB%swpused已使用交换空间的百分数kbswpcad交换空间的高速缓存使用的内存数量
9、输出内存页面的统计信息
frmpg/s每秒系统中空闲的内存页面(memory page freed)数量bufpg/s每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量campg/s每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量
10、输出inode、文件和其他内核表的信息
dentunusd目录高速缓存中未被使用的条目数量file-sz文件句柄(file handle)的使用数量inode-szi节点句柄(inode handle)的使用数量super-sz由内核分配的超级块句柄(super block handle)数量%super-sz已分配的超级块句柄占总超级块句柄的百分比dquot-sz已经分配的磁盘限额条目数量%dquot-sz分配的磁盘限额条目数量占总磁盘限额条目的百分比rtsig-sz已排队的 RT 信号的数量%rtsig-sz已排队的 RT 信号占总 RT 信号的百分比
11、输出系统交换活动信息
cswch/s每秒的系统上下文切换数量
12、 输出系统交换的统计信息
pswpin/s每秒系统换入的交换页面(swap page)数量pswpout/s每秒系统换出的交换页面(swap page)数量
13、输出TTY设备的活动信息
TTYTTY 串行设备号rcvin/s每秒接收的中断数量xmtin/s每秒传送的中断数量framerr/s每秒发生的帧错误数(frame error)量prtyerr/s每秒发生的奇偶校验错误(parity error)数量brk/s每秒发生的暂停(break)数量ovrun/s每秒发生的溢出错误(overrun error)数量
14、显示全面的累计统计信息
?
- 默认情况下,为了防止统计数据文件 /var/log/sa/saDD 迅速增大,/usr/lib/sa/sadc 没有记录每个块设备的统计信息。
- 可以在 -d -x -X 参数后添加取样参数获得即时统计信息。
- 带有 -x -X 选项的 sar 命令从来不能记录到二进制统计数据文件 。
?
?
?
查看即时统计信息
1、使用取样选项查看即时统计信息
例如:每30秒取样一次,连续取样5次
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 时间的百分比。用于体现设备的带宽利用率。
?
?
?
- avgqu-sz 的值较低时,设备的利用率较高。
- 当 %util 的值接近 100% 时,表示设备带宽已经占满。
?
?
?
?
?
要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如:?
- 怀疑CPU存在瓶颈,可用?
sar -u
?和?sar -q
?deng 等来查看 - 怀疑内存存在瓶颈,可用?
sar -B
、sar -r
?和?sar -W
?等来查看 - 怀疑I/O存在瓶颈,可用?
sar -b
、sar -u
?和?sar -d
?等来查看