系统性能分享之sar

sar命令格式 $ sar [options] [-A] [-o file] t [n]

1. 判断系统瓶颈问题

# 怀疑CPU存在瓶颈 可用 sar -u <CPU资源> sar -q <负载>等来查看 # 怀疑内存存在瓶颈 可用 sar -B <内存分页>sar -r <内存> sar -W <交换分区>等来查看 # 怀疑I/O存在瓶颈 可用 sar -b <I/O情况>sar -u <CPU资源> sar -d <设备使用情况>等来查看

2. 查看系统队列和平均负载

# 每1秒采样一次,连续采样3次,监控进程队列长度和平均负载状态:
$ sar -q 1 3
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:04:50 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
11:04:51 AM         0       295      0.02      0.03      0.00         0
11:04:52 AM         0       296      0.02      0.03      0.00         0
11:04:53 AM         0       296      0.02      0.03      0.00         0
Average:            0       296      0.02      0.03      0.00         0
 注: runq-sz: 运行队列长度(等待运行的进程数,每核的CP不能超过3个) plist-sz: 进程列表中的进程(processes)和线程数(threads)的数量 ldavg-1  最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推 ldavg-5   最后5分钟的CPU平均负载 ldavg-15  最后15分钟的CPU平均负载

3. 查看CPU使用情况

# 每1秒采样一次,连续采样3次,观察CPU 的使用情况
$ sar -u 1 3
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:03:17 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:03:18 AM     all      2.02      0.00      1.01      0.00      0.00     96.97
11:03:19 AM     all      2.02      0.00      2.02      0.00      0.00     95.96
11:03:20 AM     all      1.02      0.00      2.04      0.00      0.00     96.94
Average:        all      1.69      0.00      1.69      0.00      0.00     96.62
 注: CPU:all 表示统计信息为所有 CPU 的平均值。 %user:显示在用户级别(application)运行使用 CPU 总时间的百分比。 %nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 %system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。 %iowait: 显示用于等待I/O操作占用 CPU 总时间的百分比。 %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 %idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。 重点关注:%iowait 和 %idle 1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈 2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量 3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。 # 保存二进制文件 $ sar -u 1 3 -o test # 如果要查看二进制文件test中的内容,需键入如下sar命令: $ sar -u -f test
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:10:14 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:10:15 AM     all      2.00      0.00      1.00      0.00      0.00     97.00
11:10:16 AM     all      2.00      0.00      1.00      0.00      0.00     97.00
11:10:17 AM     all      2.02      0.00      2.02      0.00      0.00     95.96
Average:        all      2.01      0.00      1.34      0.00      0.00     96.66

4. 查看IO和传递速率

# 每1秒采样一次,连续采样3次,报告缓冲区的使用情况
$ sar -b 1 3
inux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:07:02 AM       tps      rtps      wtps   bread/s   bwrtn/s
11:07:03 AM     45.00      1.00     44.00      8.00    952.00
11:07:04 AM      0.00      0.00      0.00      0.00      0.00
11:07:05 AM      1.00      0.00      1.00      0.00      8.00
Average:        15.33      0.33     15.00      2.67    320.00
 注: tps:每秒钟物理设备的 I/O 传输总量,等于iostat中的tps rtps:每秒钟从物理设备读入的数据总量 wtps:每秒钟向物理设备写入的数据总量 bread/s:每秒钟从物理设备读入的数据(块)总量,单位为 块/s bwrtn/s:每秒钟向物理设备写入的数据(块)总量,单位为 块/s

5. 查看磁盘使用情况

# 每1秒采样一次,连续采样3次,报告设备使用情况
$ sar -d 1 3
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:12:59 AM       DEV       tps     rkB/s     wkB/s   areq-sz    aqu-sz     await     svctm     %util
11:13:00 AM  dev253-0      6.00      0.00     48.00      8.00      0.01      1.33      1.50      0.90
11:13:01 AM  dev253-0     64.00      4.00    420.00      6.62      0.12      2.33      0.31      2.00
11:13:02 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0     23.33      1.33    156.00      6.74      0.04      2.24      0.41      0.97
 注: -p 可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0 tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的. rd_sec/s:每秒读扇区的次数. wr_sec/s:每秒写扇区的次数. avgrq-sz:平均每次设备I/O操作的数据大小(扇区). avgqu-sz:磁盘请求队列的平均长度. await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).等于寻道时间+队列时间+服务时间 svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间. %util:I/O请求占CPU的百分比,比率越大,说明越饱和,I/O越慢。 1. avgqu-sz 的值较低时,设备的利用率较高。 2. 当%util的值接近 1% 时,表示设备带宽已经占满。

6. 查看inode、文件和内核监控

# 每1秒采样一次,连续采样3次,观察核心表的状态
$ sar -v 1 3
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:17:17 AM dentunusd   file-nr  inode-nr    pty-nr
11:17:18 AM      8263      2816     20024         1
11:17:19 AM      8263      2816     20023         1
11:17:20 AM      8242      2720     19990         1
Average:         8256      2784     20012         1
 注: dentunusd:目录高速缓存中未被使用的条目数量 file-nr: 文件句柄(file handle)的使用数量 inode-nr: 索引节点句柄(inode handle)的使用数量 pty-nr:  使用的pty数量

7. 查看内存使用情况

# 每1秒采样一次,连续采样3次,监控内存分页
$ sar -r 1 3
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:18:08 AM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
11:18:09 AM     71676    240660   1691728     95.94     36304    352700   3775448     97.80    794920    718716       344
11:18:10 AM     71676    240688   1691728     95.94     36332    352700   3775448     97.80    794956    718716       356
11:18:11 AM     73552    242564   1689852     95.83     36348    352688   3772452     97.72    793388    718716       356
Average:        72301    241304   1691103     95.90     36328    352696   3774449     97.77    794421    718716       352
 注: kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间. kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间. %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比. kbbufferskbcached:这两个值就是free命令中的buffer和cache. kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap). %commit:这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比. # 查看系统swap分区统计情况 # 每1秒采样一次,连续采样3次,监控系统交换活动信息 $ sar -W 1 3 注: pswpin/s:每秒系统换入的交换页面(swap page)数量 pswpout/s:每秒系统换出的交换页面(swap page)数量 # 查看内存分页监控 # 每1秒采样一次,连续采样3次,监控系统交换活动信息 $ sar -B 1 3
Linux 5.4.119-19-0009.3 (wzw) 	03/29/2024 	_x86_64_	(1 CPU)

11:20:09 AM  pswpin/s pswpout/s
11:20:10 AM      0.00      0.00
11:20:11 AM      0.00      0.00
11:20:12 AM      0.00      0.00
Average:         0.00      0.00
 注: pgpgin/s: 表示每秒从磁盘或SWAP置换到内存的字节数(KB) pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB) fault/s: 每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor) majflt/s: 每秒钟产生的主缺页数. pgfree/s: 每秒被放入空闲队列中的页个数 pgscank/s:每秒被kswapd扫描的页个数 pgscand/s:每秒直接被扫描的页个数 pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数 %vmeff: 每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

8. 统计网络信息

# 每1秒采样一次,连续采样3次
$ sar -n <关键词> 返回二进制文件:Requested activities not available in file /var/log/sa/sa25 # 进行查看 $ sar -f /var/log/sa/sa25 注: DEV 网卡 EDEV 网卡 (错误) NFS NFS 客户端 NFSD NFS 服务器 SOCK Sockets (套接字) (v4) IP IP 流 (v4) EIP IP 流 (v4) (错误) ICMP ICMP 流 (v4) EICMP ICMP 流 (v4) (错误) TCP TCP 流 (v4) ETCP TCP 流 (v4) (错误) UDP UDP 流 (v4) SOCK6 Sockets (套接字) (v6) IP6 IP 流 (v6) EIP6 IP 流 (v6) (错误) ICMP6 ICMP 流 (v6) EICMP6 ICMP 流 (v6) (错误) UDP6 UDP 流 (v6) # TCP连接统计 # 每1秒采样一次,连续采样1次 $ sar -n TCP 1 1 注: active/s  新的主动连接 passive/s  新的被动连接 iseg/s  接受的段 oseg/s  输出的段 # 网络接口信息 # 每1秒采样一次,连续采样1次 $ sar -n DEV 1 1 注: IFACE 本地网卡接口的名称 rxpck/s 每秒钟接受的数据包 txpck/s 每秒钟发送的数据库 rxKB/S 每秒钟接受的数据包大小,单位为KB txKB/S 每秒钟发送的数据包大小,单位为KB rxcmp/s 每秒钟接受的压缩数据包 txcmp/s 每秒钟发送的压缩包 rxmcst/s 每秒钟接收的多播数据包 # 统计socket连接信息 # 每1秒采样一次,连续采样1次 $ sar -n SOCK 1 1 注: totsck 当前被使用的socket总数 tcpsck 当前正在被使用的TCP的socket总数 udpsck 当前正在被使用的UDP的socket总数 rawsck 当前正在被使用于RAW的skcket总数 if-frag 当前的IP分片的数目 tcp-tw TCP套接字中处于TIME-WAIT状态的连接数量 # 网络设备通信失败信息 # 每1秒采样一次,连续采样1次 $ sar -n EDEV 1 1 注: IFACE 网卡名称 rxerr/s 每秒钟接收到的损坏的数据包 txerr/s 每秒钟发送的数据包错误数 coll/s 当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有 rxdrop/s 当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目 txdrop/s 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目 txcarr/s 当发送数据包的时候,每秒钟载波错误发生的次数 rxfram/s 在接收数据包的时候,每秒钟发生的帧对其错误的次数 rxfifo/s 在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数 txfifo/s 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数

发表回复