1. 小声哔哔
执行sar --help查看sar命令的可用参数如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a68f24decd2230e42032feda41698055.png)
主要使用格式是:sar [ options ] [ <interval> [ <count> ] ]
执行命令man sar可以查看命令的详细使用方法及输出结果的含义
options是具体操作参数,interval是可选参数,代表统计间隔,count也是可选参数,代表总的统计次数
sar命令极其强大,是对Linux当前使用状态分析的利器,下面介绍几个在日常运维排查过程中常用的命令
2. sar -u CPU使用情况报告
- 示例:sar -u 查看全天CPU使用情况
- 示例:sar -u 1 10 每秒输出一次CPU使用情况,输出10次
![](https://i-blog.csdnimg.cn/blog_migrate/8acd08e0251c48a27de37bd3e2923839.png)
user | 在用户级别(应用程序)执行时发生的CPU利用率百分比。请注意,此字段包括运行虚拟处理器所花费的时间 |
nice | 在优先级较高的用户级别执行时发生的CPU利用率百分比 |
system | 在系统级别(内核)执行时发生的CPU利用率百分比。请注意,此字段包括用于服务硬件和软件中断的时间 |
iowait | 在系统有未完成的磁盘I/O请求的过程中,一个或多个CPU空闲的时间百分比 |
steal | 虚拟机管理程序为另一个虚拟处理器提供服务时,一个或多个虚拟CPU在非自愿等待中花费的时间百分比 |
idle | 一个或多个CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比 |
- 运维总结:日常运维时,首先要关注%idle,CPU空闲百分比低代表有进程占用CPU,可以通过top命令查看CPU占用率比较高的服务,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,需要另行分析是不是需要加大内存。第二个需要关注的值是%iowait,若值过高有可能是硬盘存在IO瓶颈。
- 查看每颗CPU的使用情况:sar -P (ALL|指定CPU) 【统计间隔】 【统计次数】
示例:sar -P ALL 1 3(统计全部CPU使用情况,统计间隔一秒,总共统计3次)
![](https://i-blog.csdnimg.cn/blog_migrate/251ec5253082e13b9dcbe0a0bde3b5ab.png)
3. sar -q 获取CPU负载报告
- 示例:每三秒输出一次CPU负载报告,输出5次
- 命令:sar -q 3 5
![](https://i-blog.csdnimg.cn/blog_migrate/1bee422259a707f126d5a73d674de14d.png)
runq-sz | 运行队列的长度(等待运行的进程数,每核的CP不能超过3个) |
plist-sz | 进程列表中的进程(processes)和线程数(threads)的数量 |
ldavg-1 | 最后一分钟的平均系统负载。平均负载计算为可运行或正在运行的任务(R状态)的平均数,以及指定间隔内处于不间断睡眠(D状态)的任务数 |
ldavg-5 | 最后五分钟的CPU平均负载 |
ldavg-15 | 最后十五分钟的CPU平均负载 |
blocked | 当前阻止的任务数,等待I/O完成 |
- 运维总结:这个参数与top命令头部展示的内容很像,几个参数都是CPU负载关键参数,值得参考
4. sar -r 机器内存使用情况报告
- 示例:每三秒输出一次机器内存使用情况报告,输出5次
- 命令:sar -r 3 5
![](https://i-blog.csdnimg.cn/blog_migrate/df216549e09100ea802742285bec6abf.png)
kbmemfree | 可用内存量(以千字节为单位) |
kbmemused | 已用内存量(以千字节为单位),包括buffer和cache的使用空间 |
memused | 已使用内存空间大小kbmemused值占内存总量(不包括swap)百分比 |
kbbuffers | 内核用作buffer区的内存量(以千字节为单位) |
kbcached | 内核用作cache区的内存量(以千字节为单位) |
kbcommit | 当前工作负载所需的内存量(以千字节为单位)。这是估计需要多少RAM+swap以保证永远不会有内存不足的估计 |
commit | 当前工作负载所需的内存占内存总量(RAM + swap)的百分比。此数字可能大于100%,因为内核通常会过量使用内存 |
kbactive | 活跃的内存大小(单位:KB,最近使用的内存,通常不会被收回,除非绝对必要) |
kbinact | 不活跃的内存量大小(单位:KB,最近使用的内存,更有资格被用于其他目的) |
kbdirty | 等待写入磁盘的内存量(单位:KB) |
Linux的Buffer和Cache学习链接
- 运维总结:日常运维关注最多的可能是%memused,若内存使用占比过高需要对内存进行纵向扩容
5. sar -d -p linux磁盘IO使用情况报告
- 示例:每三秒输出一次机器磁盘使用情况报告,输出5次
- 命令:sar -d -p 3 5
![](https://i-blog.csdnimg.cn/blog_migrate/9bb51f80e76659be32c387c03a990cb2.png)
tps | 指示每秒向设备发出的传输数。多个逻辑请求可以组合为一个I/O请求。传输的大小不确定 |
rd_sec/s | 每秒从磁盘读取的扇区数。扇区的大小为512字节 |
wr_sec/s | 每秒写入磁盘的扇区数。扇区大小为512字节 |
avgrq-sz | 向磁盘发出的请求的平均大小(以扇区为单位) |
avgqu-sz | 向磁盘发出的请求的平均队列长度 |
await | 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括排队和服务时间。单位是毫秒 |
svctm | 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间(通过man sar查看文档发现该参数已经是不可信的了,将来会被移除) |
util | 向磁盘发出I/O请求所用的时间百分比(设备的带宽利用率),比率越大,说明越饱和 |
- 运维总结: 根据参数定义,首先需要关注的是%util,其次是avgqu-sz(请求队列长度)和await(处理时间),若该值持续很高有可能有性能瓶颈,考虑SSD盘吧
6. sar -n 机器网络使用信息报告
-n选项使用6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK| ALL
DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。
- 示例:每三秒输出一次网卡使用情况报告,输出5次
- 命令:sar -n DEV 3 5
![](https://i-blog.csdnimg.cn/blog_migrate/acdfcff4dba7d9d78c805098a1053cb2.png)
IFACE | 报告其统计信息的网络接口的名称 |
rxpck/s | 每秒接收的数据包总数 |
txpck/s | 每秒传输的数据包总数 |
rxkB/s | 每秒接收的千字节总数 |
txkB/s | 每秒传输的千字节总数 |
rxcmp/s | 每秒接收的压缩数据包数量(用于cslip等) |
txcmp/s | 每秒传输的压缩数据包数 |
rxmcst/s | 每秒收到的组播数据包数 |
7. 将报告以二进制文件输出
- 示例:使用-o [filename]以二进制文件输出cpu使用情况sar -u -o [filename] 1 10
- 命令:sar -u -o cpu 1 10
![](https://i-blog.csdnimg.cn/blog_migrate/c9aa8dfd73e894da2eb71ff5b63b2b4a.png)
- 使用sar -f [filename]查看二进制文件内容,命令:sar -f cpu
![](https://i-blog.csdnimg.cn/blog_migrate/8e4624c506643ff9eaf2d3b89fa73e22.png)