原文网址:Linux命令--统计多项--sar--使用/教程/实例_IT利刃出鞘的博客-CSDN博客
简介说明
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
一般Linux没有默认安装此命令,需要手动安装。sar在sysstat包里,安装sysstat即可。
第一次用sar命令会报如下错误:“无法打开 /var/log/sa/sa17: 没有那个文件或目录”。解决方案:命令:sar -o 17 // 这里的值17一般是当天的日期(我在2021年1月17日测试,所以这里是17)。这个错误是由于没有创建那个文件,可使用参数-o 让其生成。
格式
sar [ options ] [
| 选项 | 含义 |
| -A | 显示系统所有资源设备(CPU、内存、磁盘)的运行状况。 |
| -B | Paging statistics |
| -b | 显示缓冲区在采样时间内的使用情况。(I/O and transfer rate statistics) |
| -d | 显示系统所有硬盘设备在采样时间内的使用状态。(Block devices statistics) |
| -F [ MOUNT ] | Filesystems statistics |
| -H | Hugepages utilization statistics |
| -I { | Interrupts statistics |
| -m { | Power management statistics。 Keywords are: CPU CPU instantaneous clock frequency FAN Fans speed FREQ CPU average clock frequency IN Voltage inputs TEMP Devices temperature USB USB devices plugged into the system |
| -n { | 显示网络运行状态。Network statistics Keywords are: DEV Network interfaces EDEV Network interfaces (errors) NFS NFS client NFSD NFS server SOCK Sockets (v4) IP IP traffic (v4) EIP IP traffic (v4) (errors) ICMP ICMP traffic (v4) EICMP ICMP traffic (v4) (errors) TCP TCP traffic (v4) ETCP TCP traffic (v4) (errors) UDP UDP traffic (v4) SOCK6 Sockets (v6) IP6 IP traffic (v6) EIP6 IP traffic (v6) (errors) ICMP6 ICMP traffic (v6) EICMP6 ICMP traffic (v6) (errors) UDP6 UDP traffic (v6) FC Fibre channel HBAs SOFT Software-based network processing |
| -P | 显示当前系统中指定 CPU 的使用情况。 |
| -q | 显示运行列表中的进程数、进程大小、系统平均负载等。Queue length and load average statistics |
| -r [ ALL ] | 显示内存在采样时间内的使用情况。(Memory utilization statistics) |
| -S | Swap space utilization statistics |
| -u [ ALL ] | 显示系统所有 CPU 在采样时间内的负载状态。 |
| -v | 显示 inode 节点、文件和其他内核表的统计信息。(Kernel tables statistics) |
| -W | 显示系统交换活动在采样时间内的状态。Swapping statistics |
| -w | 显示任务创建和系统切换的状态。(Task creation and system switching statistics) |
| -y | 显示终端设备在采样时间的活动情况。(TTY devices statistics) |
| 命令 | 作用 |
| sar -A | 报告所有的信息 |
| sar -u | cpu利用率 |
| sar 2 5 | 每2s显示5次cpu的使用情况 |
关于cpu消耗的问题,一般通过jstack或者sar都可以解决,复杂的话需要借助于perf。
结果含义 示例1:CPU资源监控法1:每 1 秒统计一次,统计 3 次
[root@lgh ~]# sar -u 1 3 Linux 2.6.32-696.el6.x86_64 (lgh) 10/06/2019 _x86_64_ (32 CPU) 09:42:45 PM CPU %user %nice %system %iowait %steal %idle 09:42:46 PM all 0.00 0.00 0.00 0.00 0.00 100.00 09:42:47 PM all 0.03 0.00 0.03 0.00 0.00 99.94 09:42:48 PM all 0.03 0.00 0.03 0.00 0.00 99.94 Average: all 0.02 0.00 0.02 0.00 0.00 99.96
法2:保存到文件
[root@lgh ~]# sar -o test.txt -u 1 3 #其中-o表示以二进制的格式把结果存入到test.txt文件中,不能使用cat,more,less等查看 [root@lgh ~]# sar -u -f test.txt #查看该二进制结果文件 Linux 2.6.32-696.el6.x86_64 (lgh) 10/06/2019 _x86_64_ (32 CPU) 09:46:14 PM CPU %user %nice %system %iowait %steal %idle 09:46:15 PM all 0.00 0.00 0.00 0.00 0.00 100.00 09:46:16 PM all 0.03 0.00 0.03 0.00 0.00 99.94 09:46:17 PM all 0.00 0.00 0.03 0.00 0.00 99.97 Average: all 0.01 0.00 0.02 0.00 0.00 99.97
%user #用户空间的CPU使用
%nice 改变过优先级的进程的CPU使用率
%system 内核空间的CPU使用率
%iowait CPU等待IO的百分比
%steal 虚拟机的虚拟机CPU使用的CPU
%idle 空闲的CPU
在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。
示例2:内存统计分析每间隔1秒统计一次,总共统计3次
[root@lgh ~]# sar -r 1 3 Linux 2.6.32-696.el6.x86_64 (lgh) 10/06/2019 _x86_64_ (32 CPU) 10:01:15 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 10:01:16 PM 233550984 30597240 11.58 758212 20745900 14822388 5.44 10:01:17 PM 233550836 30597388 11.58 758212 20745900 14822388 5.44 10:01:18 PM 233551972 30596252 11.58 758212 20745900 14822388 5.44 Average: 233551264 30596960 11.58 758212 20745900 14822388 5.44
kbmemfree 空闲的物理内存大小
kbmemused 使用中的物理内存大小
%memused 物理内存使用率
kbbuffers 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcached 缓存的文件大小
kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
每间隔1秒统计一次,总共统计3次
[root@lgh ~]# sar -d 1 3 Linux 2.6.32-696.el6.x86_64 (lgh) 10/06/2019 _x86_64_ (32 CPU) 10:08:16 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:08:17 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:17 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:17 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:17 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:08:18 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:18 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:18 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:18 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:08:19 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:19 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:08:19 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
DEV 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps:每秒I/O的传输总数
rd_sec/s 每秒读取的扇区的总数
wr_sec/s 每秒写入的扇区的总数
avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz 磁盘请求队列的平均长度
await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm I/O的服务处理时间,即不包括请求队列中的时间
%util I/O请求占用的CPU百分比,值越高,说明I/O越慢



