0%

sysstat 工具总结 - sar

sar 工具

sar 工具是 System Activity Reporter。可以十分方便的检测和存储系统的性能指标并输出报告,具备两个主要的功能。

  • 即时采样和输出 即 sar 命令(/usr/bin/sar
  • 每日信息统计/usr/lib64/sa/ 下的工具配合 cron 完成

sar 命令功能和使用

sar 的使用很简单,命令方式是:

1
sar -<option> <interval> <count>
sar 查询系统平均负载情况

例子:统计系统负载,每秒采样,进行三次:

1
sar -q 1 3

sar -q

  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(线程也算)的数量
  • ldavg-1:最后 1 分钟的系统平均负载
  • ldavg-5:过去 5 分钟的系统平均负载
  • ldavg-15:过去 15 分钟的系统平均负载
  • blocked 由于 io 阻塞的线程数量

以上的结果和 top 得到的信息基本一致,一般主要考虑 5 及 15 分钟的平均负载。基数是服务器核数,比如服务器核心数是 1,ldavg = 0.6 意味着服务器载荷为 60%;如果服务器核心数是 2,则负载应看做 30%。

sar 查询 CPU 负载情况

例子:统计 CPU 负载,每秒采样,进行三次:

1
sar -u 1 3

sar -u

  • %user:用户态进程运行占用 CPU 总时间的百分比。
  • %nice:用户态进程 nice 操作所占用 CPU 总时间的百分比。
  • %system:在核心态进程运行所使用 CPU 总时间的百分比。
  • %iowait:用于等待 I/O 占用 CPU 总时间的百分比。
  • %steal:为虚拟进程提供服务而等待虚拟 CPU 的百分比。
  • %idle:CPU 空闲时间占用 CPU 总时间的百分比。

一般关注 %idle 时间占比即可,但是如果 %idle 占比下降或者过小,可以再看 CPU 时间是花在什么处理上更多,比如 %iowait 过高以为读写过多或者有网络和磁盘等的瓶颈,需要再结合 sar -biostatnetstat 等查看;如果 %user 过高,需要 sar -qtopjstack 之类分析。

-u 这是针对所有核心进行的统计,也可以手动指定核心,用 -P <core index> 来指定,或者使用 -P ALL 来选择全部核心。使用 -P ALL 除了会像 -u 一样输出整体统计,也会同时列数单个 CPU 核心的情况

sar 查询磁盘使用情况

例子:统计磁盘使用率,每秒采样,进行三次:

1
sar -b 1 3

sar -b

  • rtps 每秒读请求发起的次数
  • wtps 每秒写请求发起的次数,fsync 这样的调用会触发,在文件系统层面可能会合并应用层逻辑上的多次写操作
  • tps 以上两者相加
  • bread/s 每秒读取的 block 数量
  • bwrtn/s 每秒写入的 block 数量

对于磁盘 I/O 状态的检查比较容易,以上任何值过高,配合上 CPU iowait 过高的情况都能发现问题。要统计具体的写入或者读取速率需要 bread/s 或者 bwrtn/s 乘上 block size 。具体的 block size 因文件系统而异,同时也可以格式化时自定义,以 CentOS XFS 为例一般默认 4096 bytes。可以通过 fdisk -l 或者 stat -f <file> 等方法看到。

sar 统计网络信息

使用 -n [keyword] 来进行网络方面的信息统计。由于网络指标比较多,所以必须使用关键字指示 sar 需要输出的内容。可选项比较多,有 DEVNFSTCPICMP 等等(具体看 man sar),其中 DEVEDEV 这样的比较常用。

1
2
sar -n DEV 1 3
sar -n EDEV 1 3

sar -n

  • IFACE 你的网卡,LAN 口名称
  • rxpck/s 每秒钟接收的数据包
  • txpck/s 每秒钟发送的数据包
  • rxbyt/s 每秒钟接收的字节数
  • txbyt/s 每秒钟发送的字节数
  • rxcmp/s 每秒钟接收的压缩数据包
  • txcmp/s 每秒钟发送的压缩数据包
  • rxmcst/s 每秒钟接收的多播数据包
  • rxerr/s 每秒钟接收的坏数据包
  • txerr/s 每秒钟发送的坏数据包
  • coll/s 每秒冲突数
  • rxdrop/s 因为缓冲充满,每秒钟丢弃的已接收数据包数
  • txdrop/s 因为缓冲充满,每秒钟丢弃的已发送数据包数
  • txcarr/s 发送数据包时,每秒载波错误数
  • rxfram/s 每秒接收数据包的帧对齐错误数
  • rxfifo/s 接收的数据包每秒FIFO过速的错误数
  • txfifo/s 发送的数据包每秒FIFO过速的错误数

一般来说,-n EDEV 下展示的内容都会为 0;如果不是为 0,多少存在着网络问题,容易出现的是 rxdrop/srxdrop/s 意味着网络超载的情况。而 -n DEV 下展示的一般意义的统计数据,比如 rxbyt/stxbyt/s 可以查看机器的下行和上行流量

sar 的其他用法

option 选项一般用来指定统计不同的信息,除了上述的 -q-u 等选项,还有比如:

  • -S swap 用量相关的信息;-W swapping 交换信息
  • -r 内存 相关信息;-u CPU 相关信息
  • -v inode 和 文件相关的信息
  • -n 网络相关统计信息
  • -b I/O 相关信息

功能上更不常用的就不列举了,其他特殊的还有

  • -o <filename> 指定统计信息输出到目标文件;
  • -f <filename> 指定目标文件读取采样信息
  • -s [ hh:mm:ss ] 如果 -f 指定了采样文件,可以从中加入筛选-开始时间(开区间)
  • -e [ hh:mm:ss ] 同上,指定结束时间

sar 对系统持续统计

在 /usr/lib64/sa 下有几个 sar 执行持续统计的工具,并在 sysstat 安装后写入 crontab 定时调用:

  • sa1 每天使用,统计并存储系统信息至二进制文件,sadc 的前端程序
  • sa2 每天使用,利用每日系统信息输出报告,sar 的一个前端程序
  • sadc 系统收集统计的工具,是 sa1sar 的后端程序

具体流程是

  1. 每隔 10 分钟使用 sa1 统计一次系统信息,记录到 /var/log/sa/sa<DD> 中。这是 sar 的二进制统计信息,会在当天不断追加,可以使用 sar -f <file> 进行查看。
  2. 每天 23:53 使用 sa2 利用之前的 sa1 的日志输出一次报告,输出到 /var/log/sa/sar<DD>。就是将之前 saDD 二进制内容加工成文本信息,如同使用 sar 命令的结果一样,之后可以使用 cat 之类的方式直接查看。里面内容会比较多,默认使用了 sa2 -A,可以在报告中只关心一部分内容,调整参数即可精简报告内容,而 saDD 文件中还是会有全部的统计数据。

这部分数据可以用于回溯服务器曾经的状态。下面是 /etc/cron.d/sysstat

1
2
3
4
5
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
谢谢支持!