sar 是非常强大性能分析命令,通过 sar 命令可以全面的获取系统的 CPU、运行队列、磁盘 I/O、交换区、内存、 cpu 中断、网络等性能数据。
sar 命令行的常用格式:
sar [options] [-A] [-o file] t [n]
在命令行中, n 和 t 两个参数组合起来定义采样间隔和次数, t 为采样间隔, 是必须有的参数, n 为采样次数,是可选的,默认值是 1, -o file 表示将命令结果以二进制格式存放在文件中, file 在此处不是关键字,是文件名。 options 为命令行选项, sar 命令的选项很多,下面只列出常用选项:
-A:所有报告的总和。
-u: CPU 利用率
-v:进程、节点、文件和锁表状态。
-p:像是当前系统中指定 CPU 使用信息。
-d:硬盘使用报告。
-r:显示系统内存的使用情况。
-n: 显示网络运行状态。 参数后面可跟 DEV、 EDEV、 SOCK 和 FULL。 DEV 显示网络接口信息, EDEV 显示网络错误的统计数据, SOCK 显示套接字信息, FULL 显示前三参数所以信息。
-q:显示运行队列的大小,它与系统当时的平均负载相同
-B:内存分页情况
-R:显示进程在采样时间内的活动情况。
-g:串口 I/O 的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-W:系统交换活动。
sar——监控 CPU
[sdk_test@ssdk1 server]$ sar -u 3 5 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:42:32 PM CPU %user %nice %system %iowait %steal %idle 03:42:35 PM all 1.08 0.00 0.58 0.00 0.00 98.33 03:42:38 PM all 0.75 0.00 0.50 0.00 0.00 98.75 03:42:41 PM all 1.25 0.00 0.58 0.00 0.00 98.17 03:42:44 PM all 0.75 0.00 0.33 0.00 0.00 98.91 03:42:47 PM all 1.50 0.00 0.75 0.00 0.00 97.75 Average: all 1.07 0.00 0.55 0.00 0.00 98.38
%usr:用户进程消耗的 CPU 时间百分比。
%nice: 运行正常进程消耗的 CPU 时间百分比。
%system:系统进程消耗的 CPU 时间百分比。
%iowait: I/O 等待所占 CPU 时间百分比。
%steal:在内存紧张环境下, pagein 强制对不同的页面进行的 steal 操作。
%idle: CPU 空闲状态的时间百分比。
在所有的显示中,我们应主要注意%iow 和%idle, %iow 的值过高,表示硬盘存在 I/O 瓶颈, %idle 值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存, 此时应加大内存容量。 %idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表 明系统中最需要解决的资源是 CPU。
sar——内存和交换空间监控
[sdk_test@ssdk1 server]$ sar -r 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:50:06 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 03:50:11 PM 155580 16115280 99.04 252504 12431540 3873512 23.06 03:50:16 PM 154860 16116000 99.05 252504 12431764 3873512 23.06 03:50:21 PM 155116 16115744 99.05 252504 12432000 3873512 23.06 Average: 155185 16115675 99.05 252504 12431768 3873512 23.06
[sdk_test@ssdk1 server]$ free total used free shared buffers cached Mem: 16270860 16113196 157664 464 252644 12430100 -/+ buffers/cache: 3430452 12840408 Swap: 524280 0 524280
Kbmemfree: 这个值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空间。
kbmemused:这个值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空间。
%memused:这个值是 kbmemused 和内存总量(不包括 swap)的一个百分比。
kbbuffers 和 kbcached:这两个值就是 free 命令中的 buffer 和 cache。
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。
%commit:这个值是 kbcommit 与内存总量(包括 swap)的一个百分比。
sar——内存分页监控
[sdk_test@ssdk1 server]$ sar -B 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:49:40 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 03:49:45 PM 0.00 18.47 9.64 0.00 101.20 0.00 0.00 0.00 0.00 03:49:50 PM 0.00 14.46 362.05 0.00 149.80 0.00 0.00 0.00 0.00 03:49:55 PM 0.00 136.82 1683.70 0.00 552.31 0.00 0.00 0.00 0.00 Average: 0.00 56.53 684.46 0.00 267.58 0.00 0.00 0.00 0.00
pgpgin/s:表示每秒从磁盘或 SWAP 置换到内存的字节数(KB)。
pgpgout/s:表示每秒从内存置换到磁盘或 SWAP 的字节数(KB)。
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)。
majflt/s:每秒钟产生的主缺页数。
sar——I/O 和传送速率监控
[sdk_test@ssdk1 server]$ sar -b 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:49:18 PM tps rtps wtps bread/s bwrtn/s 03:49:23 PM 0.80 0.00 0.80 0.00 16.00 03:49:28 PM 3.62 0.00 3.62 0.00 291.35 03:49:33 PM 2.40 0.00 2.40 0.00 189.18 Average: 2.27 0.00 2.27 0.00 165.24
tps:每秒钟物理设备的 I/O 传输总量。
rtps:每秒钟从物理设备读入的数据总量。
wtps:每秒钟向物理设备写入的数据总量。
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s。
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s。
sar——进程队列长度和平均负载状态监控
[sdk_test@ssdk1 server]$ sar -q 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:48:56 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 03:49:01 PM 0 535 0.02 0.02 0.00 03:49:06 PM 0 536 0.01 0.02 0.00 03:49:11 PM 0 536 0.01 0.02 0.00 Average: 0 536 0.01 0.02 0.00
runq-sz:运行队列的长度(等待运行的进程数)。
plist-sz:进程列表中进程(processes)和线程(threads)的数量。
ldavg-1:最后 1 分钟的系统平均负载(System load average)。
ldavg-5:过去 5 分钟的系统平均负载。
ldavg-15:过去 15 分钟的系统平均负载。
sar——系统交换活动信息监控
[sdk_test@ssdk1 server]$ sar -W 3 5 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:45:41 PM pswpin/s pswpout/s 03:45:44 PM 0.00 0.00 03:45:47 PM 0.00 0.00 03:45:50 PM 0.00 0.00 03:45:53 PM 0.00 0.00 03:45:56 PM 0.00 0.00 Average: 0.00 0.00
pswpin/s:每秒系统换入的交换页面(swap page)数量。
pswpout/s:每秒系统换出的交换页面(swap page)数量。
sar——设备使用情况监控
[sdk_test@ssdk1 server]$ sar -d 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 04:16:22 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:16:27 PM dev252-0 0.40 0.00 6.41 16.00 0.00 0.00 0.00 0.00 04:16:27 PM dev252-16 0.80 0.00 155.51 194.00 0.00 1.00 1.00 0.08 04:16:27 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:16:32 PM dev252-0 1.80 0.00 16.03 8.89 0.00 0.00 0.00 0.00 04:16:32 PM dev252-16 1.20 0.00 142.69 118.67 0.00 1.50 0.83 0.10 04:16:32 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:16:37 PM dev252-0 1.20 0.00 20.80 17.33 0.00 0.00 0.00 0.00 04:16:37 PM dev252-16 1.00 0.00 68.80 68.80 0.00 1.40 1.00 0.10 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev252-0 1.13 0.00 14.42 12.71 0.00 0.00 0.00 0.00 Average: dev252-16 1.00 0.00 122.30 122.13 0.00 1.33 0.93 0.09
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 的百分比,比率越大,说明越饱和。
1. avgqu-sz 的值较低时,设备的利用率较高。
2. 当%util 的值接近 1% 时,表示设备带宽已经占满。
总结
要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑 CPU 存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、 sar -r 和 sar -W 等来查看
怀疑 I/O 存在瓶颈,可用 sar -b、 sar -u 和 sar -d 等来查看