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:
每秒钟从物理设备读入的数据(块)总量,单位为 块/sbwrtn/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-0tps:
每秒从物理磁盘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)的一个百分比.kbbuffers
和kbcached
:这两个值就是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 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数