前言:最近两几天因为面试问到如何查看历史负载的问题?我的回答是sar,但是命令的具体用法我印象不深刻。因此,我通过这按博客,来认识sar命令。
一、sar概念
sysstat是Linux 系统中的常用工具包,而sar 是 Linux中sysstat工具包中的用于监控Linux系统性能的工具之一。sysstat 工具包中包含两种类型的工具:即时查看工具(iostat、mpstat、sar);累计统计工具(sar)因此sar命令,又叫做系统活动情况报告。不仅可以实时查看服务器的性能,还可以做累计统计。二、sar可监控的范围 4. 文件的读写情况 5. 系统调用的使用情况 6. 磁盘I/O使用情况 7. CPU的使用统计 8. 内存使用状况 9. 进程活动 10. IPC有关的活动
三、sar命令使用环境 安装sar: yum -y install sysstat sar命令使用格式: sar+ 命令行选项(可选) + 间隔时间(可选) + 次数(可选)
常用来判断一个系统瓶颈问题: 1.查询CPU可用 sar -u 和 sar -q 等来查看 2. 查询内存可用 sar -B、sar -r 和 sar -W 等来查看 3. 查询io可用 sar -b、sar -u 和 sar -d 等来查看
四、sar命令累计统计的实现过程
系统会通过调用 /usr/lib64/sa/ 中的三个工具(sa1 sa2 sadc)来实现,周期地记录当时的系统性能的信息的功能。
sa1 :收集并将每天的系统性能的信息写入一个二进制的文件中,它是sadc的前端程序
sa2 :收集每天的系统活跃的信息并写入总结性的文件中,其作为 sar的前端程序
sadc :收集系统的动态数据的数据并写入一个二进制的文件中,其作为 sar 工具的后端
五、sar的日志
sar是由有类似日志切割的功能的,它会依据/etc/cron.d/sysstat中的计划任务,将日志放入/var/log/sa/中
注:日志为二进制文件,不可使用more、less、vim工具查看,必须使用sar或sadf 如要查看某一时间段的服务器的性能的其中一个方法就是:使用sar命令,查看当天的日志文件
# sar -f /var/log/sa/sa05注意:sar查看性能或其日志时,使用的12/24小时制;日志的切割是昨天晚上12点到今天12点为一天;默认只保留一个月的日志
六、格式
1、格式: sar [ options ] [ [ ] ] 选项: [ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ -I { [,…] | SUM | ALL | XALL } ] [ -P { [,…] | ALL } ] [ -m { [,…] | ALL } ] [ -n { [,…] | ALL } ] [ -j { ID | LABEL | PATH | UUID | … } ] [ -f [ ] | -o [ ] | -[0-9]+ ] [ -i ] [ -s [ hh:mm:ss ] ] [ -e [ hh:mm:ss ] ]
2、常用选项
-A 所有报告的总和 -B 输出内存页面的统计信息 -b 输出I/O和传送速率的统计信息 -C 输出进程统计信息及每秒创建的进程数 -d 输出每一个块设备的活动信息 -H 输出交换空间利用率信息 -h 输出帮助信息 -p 输出友好设备名字,以方便查看,常与-d和-n参数结合使用-q 输出进程队列长度和系统平均负载状态统计信息 -R 输出内存页面的统计信息 -r 输出内存和交换空间的统计信息 -S 输出交换空间利用率信息 -t 读取 /var/log/sa/下的某日志的数据时显示其中记录的原始时间 -u 输出整体CPU使用情况的统计信息 -V 输出版本信息 -v 输出内核表状况统计信息(inode、文件和其他内核表的统计信息) -W 输出系统交换的统计信息 -w 输出任务创建与系统转换统计信息 -y 输出终端设备的活动信息-----------I 输出指定中断的统计信息,后方可加参数{…|SUM|ALL|XALL} … 指定中断号SUM 指定输出每秒接收到的中断总数ALL 指定输出前16个中断XALL 指定输出全部的中断信息-----------P 输出指定的部分的CPU的统计信息,后方可加参数{cpu|ALL}cpu 指定cpuALL 输出单个和整体cpu的统计数据-----------n 输出网络设备(网卡)状态统计信息,后方可加参数{DEV|EDEV|NFS|NFSD|SOCK|ALL} DEV 输出网络设备的统计信息EDEV 输出网络设备的错误统计信息NFS 输出NFS客户端的活动统计信息NFSD 输出NFS服务器的活动统计信息SOCK 输出网络套接字的使用统计信息ALL 输出所有类型的网络活动统计信息-----------f 从文件中读取数据信息。一般读取sar日志,也可读取-o选项生成的文件,后方要加文件名 -o 将sar的输出信息保存到文件中,后方要加文件名 -i 指定间隔时长,单位为秒-s
3、输出项
cpu的输出 [root@erhou ~]# sar -u Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ ( 1 CPU) 02:50:01 PM CPU %user %nice %system %iowait %steal %idle 03:00:01 PM all 0.13 0.00 0.23 0.34 0.00 99.29 Average: all 0.13 0.00 0.23 0.34 0.00 99.29 11:06:53 PM LINUX RESTART 11:10:02 PM CPU %user %nice %system %iowait %steal %idle 11:20:01 PM all 0.04 0.00 0.19 0.00 0.00 99.77 Average: all 0.04 0.00 0.19 0.00 0.00 99.77解释: %usr CPU在用户模式下,执行进程的时间百分比 %nice CPU在用户模式下,用于nice操作,所占用CPU总时间的百分比 %system CPU处在系统模式(内核态)下,执行进程的时间百分比 %iowait CPU用于等待I/O操作完成(等待输入输出完成),占用CPU总时间的百分比 %steal 管理程序为另一个虚拟进程提供服务而等待虚拟CPU的百分比 %idle CPU空闲时间百分比
I/O和传送速率输出 [root@erhou ~]# sar -b Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ (1 CPU) 02:50:01 PM tps rtps wtps bread/s bwrtn/s 03:00:01 PM 0.48 0.23 0.25 29.86 4.79 Average: 0.48 0.23 0.25 29.86 4.79 11:06:53 PM LINUX RESTART 11:10:02 PM tps rtps wtps bread/s bwrtn/s 11:20:01 PM 0.04 0.00 0.04 0.00 0.42 11:30:01 PM 0.08 0.01 0.08 0.21 0.77 Average: 0.06 0.00 0.06 0.11 0.60解释: tps 每秒向磁盘设备请求数据的次数,包括读、写请求,其为rtps与wtps的和。每一次IO下发后会先将多个请求合并为一个I/O磁盘请求,这里tps指请求合并后的请求计数 rtps 每秒向磁盘设备的读请求次数 wtps 每秒向磁盘设备的写请求次数 bread/s 每秒钟从物理设备读入的数据量,单位为 块/s bwrtn/s 每秒钟向物理设备写入的数据量,单位为 块/s
设备使用情况输出 [root@erhou ~]# sar -d Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ (1 CPU) 02:50:01 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 03:00:01 PM dev8-0 0.48 29.86 4.79 71.98 0.01 18.47 12.55 0.60 03:00:01 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:01 PM dev253-0 0.49 29.86 4.79 70.74 0.01 18.23 12.34 0.60 03:00:01 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:01 PM dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev8-0 0.48 29.86 4.79 71.98 0.01 18.47 12.55 0.60 Average: dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev253-0 0.49 29.86 4.79 70.74 0.01 18.23 12.34 0.60 Average: dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:06:53 PM LINUX RESTART 11:10:02 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 11:20:01 PM dev8-0 0.04 0.00 0.42 11.32 0.00 0.77 0.27 0.00 11:20:01 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:20:01 PM dev253-0 0.04 0.00 0.42 10.38 0.00 0.88 0.25 0.00 11:20:01 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:20:01 PM dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:30:01 PM dev8-0 0.08 0.21 0.77 12.06 0.00 1.82 1.41 0.01 11:30:01 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:30:01 PM dev253-0 0.09 0.21 0.77 11.15 0.00 1.77 1.30 0.01 11:30:01 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:30:01 PM dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev8-0 0.06 0.11 0.60 11.83 0.00 1.49 1.06 0.01 Average: dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev253-0 0.06 0.11 0.60 10.91 0.00 1.49 0.97 0.01 Average: dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00解释: DEV 磁盘设备,加上用参数-p可以打印出sda等磁盘设备名称;如不加参数-p,设备则显示为dev253-0等 tps 每秒向磁盘设备请求数据的次数,包括读、写请求,其为rtps与wtps的和。每一次IO下发后会先将多个请求合并为一个I/O磁盘请求,这里tps指请求合并后的请求计数 rd_sec/s 每秒读扇区的次数 wr_sec/s 每秒写扇区的次数 avgrq-sz 平均每次设备I/O操作的数据大小(扇区 )avgqu-sz 磁盘请求队列的平均长度 await 从请求磁盘到系统处理完,每次请求的平均消耗时间,包括请求队列等待时间(单位是毫秒) svctm 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间 %util I/O请求占CPU的百分比
网络设备统计信息输出 [root@erhou ~]# sar -n DEV Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ (1 CPU) 02:50:01 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 03:00:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:01 PM ens33 1.37 0.85 0.10 0.09 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 1.37 0.85 0.10 0.09 0.00 0.00 0.00 11:06:53 PM LINUX RESTART 11:10:02 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 11:20:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:20:01 PM ens33 0.08 0.00 0.01 0.00 0.00 0.00 0.00 11:30:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:30:01 PM ens33 0.13 0.05 0.01 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 0.10 0.02 0.01 0.00 0.00 0.00 0.00解释: IFACE 网络设备名 rxpck/s 每秒接收的包数量 txpck/s 每秒传输的包数量 rxbyt/s 每秒接收的字节数(单位为byte) txbyt/s 每秒传输的字节数(单位为byte) rxkB/s 每秒收的数据量(单位为kB) txkB/s 每秒发的数据量(单位为kB) rxcmp/s 每秒接收压缩包的数量 txcmp/s 每秒传输压缩包的数量 rxmcst/s 每秒接收的多播(multicast)包的总数排查网络设备故障
网络设备故障信息输出 [root@erhou ~]# sar -n EDEV|egrep 'ens33|IFACE' 02:50:01 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 03:00:01 PM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:10:02 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 11:20:01 PM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:30:01 PM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:40:01 PM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00解释: IFACE 网络设备名 rxerr/s 每秒接收的坏包数量 txerr/s 传输包时每秒发生错误的数量 coll/s 传输包时每秒发生冲突的数量 rxdrop/s 接收包时,每秒丢弃的包的数量(缺乏缓存导致) txdrop/s 传输包时,每秒丢弃的包的数量(缺乏缓存导致) txcarr/s 传输包时,每秒发生的传输错误的数量 rxfram/s 接收包时,每秒发生帧校验错误的数量 rxfifo/s 接收包时,每秒钟缓冲区溢出错误的数量 txfifo/s 传输包时,每秒钟缓冲区溢出错误的数量
内存分页状态输出 [root@erhou ~]# sar -B Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ (1 CPU) 02:50:01 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 03:00:01 PM 14.93 2.40 20.88 0.05 9.16 0.00 0.00 0.00 0.00 Average: 14.93 2.40 20.88 0.05 9.16 0.00 0.00 0.00 0.00 11:06:53 PM LINUX RESTART 11:10:02 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 11:20:01 PM 0.00 0.21 5.52 0.00 6.65 0.00 0.00 0.00 0.00 11:30:01 PM 0.11 0.39 7.69 0.00 3.97 0.00 0.00 0.00 0.00 11:40:01 PM 0.00 0.15 8.94 0.00 4.20 0.00 0.00 0.00 0.00 Average: 0.04 0.25 7.39 0.00 4.94 0.00 0.00 0.00 0.00解释: pgpgin/s 每秒从磁盘空间或交换空间置换到内存的字节数(单位为KB) pgpgout/s 每秒从内存置换到磁盘空间或交换空间的字节数(单位为KB) fault/s 每秒钟系统产生的缺页数(主缺页加次缺页) majflt/s 每秒钟产生的主缺页数 pgfree/s 每秒被放入空闲队列中的页个数 pgscank/s 每秒被kswapd扫描的页个数 pgscand/s 每秒直接被扫描的页个数 pgsteal/s 每秒钟从cache中被清除来满足内存需要的页个数 %vmeff 每秒清除的页占总扫描页的百分比
进程队列长度和平均负载状态输出 [root@erhou ~]# sar -q Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ (1 CPU) 02:50:01 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 03:00:01 PM 1 125 0.03 0.06 0.10 0 Average: 1 125 0.03 0.06 0.10 0 11:06:53 PM LINUX RESTART 11:10:02 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 11:20:01 PM 1 124 0.01 0.04 0.05 0 11:30:01 PM 1 124 0.00 0.02 0.05 0 11:40:01 PM 1 124 0.00 0.02 0.05 0 Average: 1 124 0.00 0.03 0.05 0解释: runq-sz 运行队列的长度,等待运行的进程数量 plist-sz 进程列表中进程和线程的数量 ldavg-1 最后1分钟的系统平均负载 ldavg-5 过去5分钟的系统平均负载 ldavg-15 过去15分钟的系统平均负载
内存和交换空间状态输出 [root@erhou ~]# sar -r Linux 3.10.0-1127.13.1.el7.x86_64 (erhou) 07/03/2020 _x86_64_ (1 CPU) 02:50:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 03:00:01 PM 69988 409616 85.41 0 263528 241576 9.38 142088 160596 0 Average: 69988 409616 85.41 0 263528 241576 9.38 142088 160596 0 11:06:53 PM LINUX RESTART 11:10:02 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 11:20:01 PM 274084 205520 42.85 2108 78700 238280 9.25 53736 63368 0 11:30:01 PM 274008 205596 42.87 2108 78708 238280 9.25 54056 63056 0 11:40:01 PM 273888 205716 42.89 2108 78712 238280 9.25 54124 63052 0 Average: 273993 205611 42.87 2108 78707 238280 9.25 53972 63159 0解释: kbmemfree 空闲的内存数量(单位为KB) kbmemused 已使用的内存数量,不包含内核使用的内存(单位为KB) %memused 已使用内存的百分数 kbbuffers 内核缓冲区buffer,使用的内存数量(单位为KB) kbcached 内核高速缓存cache数据使用的内存数量(单位为KB) kbcommit 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap) %commit kbcommit与所有内存总量的百分比
sar使用实例-查看某一时间段的情况
查看下午15点到18点的cpu [root@erhou ~]# sar -s 15:00:00 -e 18:00:00 查看本月3号的cpu [root@erhou ~]# cd /var/log/sa [root@erhou sa]# ls sa03 sa04 sa05 [root@erhou sa]#sar -f sa03注意: 该操作需要去查看sar的日志(第五节已经介绍一次)默认只保存一个月的。sar查看性能或其日志时,注意自己的使用的是12还是24小时制,日志的切割是昨天晚上12点到今天12点为一天