sar命令来进行性能分析
sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,
包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等,sar命令有sysstat安装包安装,
本文主要以CentOS 7.2_x64系统为例,介绍sar命令
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
-A:显示所有的报告信息;
-b:显示I/O速率;
-B:显示换页状态;
-c:显示进程创建活动;
-d:显示每个块设备的状态;
-e:设置显示报告的结束时间;
-f:从指定文件提取报告;
-i:设状态信息刷新的间隔时间;
-P:报告每个CPU的状态;
-R:显示内存状态;
-u:显示CPU利用率;
-v:显示索引节点,文件和其他内核表的状态;
-w:显示交换分区状态;
-x:显示给定进程的状态。
1. CPU资源监控
例如,每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中,需键入如下命令:sar -u -o test 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
10:33:37 AM CPU %user %nice %system %iowait %steal %idle
10:33:47 AM all 0.05 0.00 0.05 0.00 0.05 99.85
10:33:57 AM all 0.07 0.00 0.08 0.00 0.12 99.73
10:34:07 AM all 0.05 0.00 0.05 0.00 0.07 99.83
Average: all 0.06 0.00 0.06 0.00 0.08 99.81
--all 表示统计信息所有CPU的平均值
--%user 表示在用户级别(application)运行使用CPU总时间的百分比
--%nice 表示在用户级别,用于nice操作,所占用CPU总时间的百分比
--%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
--%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
--%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
--%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
2. inode、文件和其他内核表监控
例如,每10秒采样一次,连续采样3次,观察核心表的状态,需键入如下命令:sar -v 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
10:40:32 AM dentunusd file-nr inode-nr pty-nr
10:40:42 AM 288384 3808 251522 1
10:40:52 AM 288384 3744 251522 1
10:41:02 AM 288384 3776 251522 1
Average: 288384 3776 251522 1
--dentunusd:目录高速缓存中未被使用的条目数量
--file-nr:文件句柄(file handle)的使用数量
--inode-nr:索引节点句柄(inode handle)的使用数量
--pty-nr:使用的pty数量
3. 内存和交换空间监控
例如,每10秒采样一次,连续采样3次,监控内存分页:sar -r 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
02:10:56 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
02:11:06 PM 2370880 3036348 56.15 1204 613624 7776196 21.21 1800424 501168 4
02:11:16 PM 2370864 3036364 56.15 1204 613624 7776196 21.21 1800432 501164 4
02:11:26 PM 2370792 3036436 56.16 1204 613624 7776160 21.21 1800432 501164 4
Average: 2370845 3036383 56.15 1204 613624 7776184 21.21 1800429 501165 4
--kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
--kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
--%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
--kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
--kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
--%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
--Kbactive:活动内存量(以千字节计算)(最近使用的内存,通常不会被收回,除非绝对必要)
--kbinact:不活动内存量(以千字节计算的内存(最近使用的内存),更有资格被用于其他目的)。
--kbdirty:以KB为单位的内存量等待写入磁盘
4. 内存分页监控
例如,每10秒采样一次,连续采样3次,监控内存分页:sar -B 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
02:14:29 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
02:14:39 PM 0.00 0.10 1151.40 0.00 568.00 0.00 0.00 0.00 0.00
02:14:49 PM 0.00 0.00 824.40 0.00 447.00 0.00 0.00 0.00 0.00
02:14:59 PM 0.00 0.00 1488.30 0.00 930.90 0.00 0.00 0.00 0.00
Average: 0.00 0.03 1154.70 0.00 648.63 0.00 0.00 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)的百分比
5. I/O和传送速率监控
例如,每10秒采样一次,连续采样3次,报告缓冲区的使用情况,需键入如下命令:sar -b 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
02:19:14 PM tps rtps wtps bread/s bwrtn/s
02:19:24 PM 0.00 0.00 0.00 0.00 0.00
02:19:34 PM 0.00 0.00 0.00 0.00 0.00
02:19:44 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 0.00 0.00 0.00
--tps:每秒钟物理设备的 I/O 传输总量
--rtps:每秒钟从物理设备读入的数据总量
--wtps:每秒钟向物理设备写入的数据总量
--bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
--bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
6. 进程队列长度和平均负载状态监控
例如,每10秒采样一次,连续采样3次,监控进程队列长度和平均负载状态:sar -q 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
02:21:26 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
02:21:36 PM 0 627 0.00 0.01 0.05 0
02:21:46 PM 2 627 0.00 0.01 0.05 0
02:21:56 PM 0 627 0.00 0.01 0.05 0
Average: 1 627 0.00 0.01 0.05 0
--runq-sz:运行队列的长度(等待运行的进程数)
--plist-sz:进程列表中进程(processes)和线程(threads)的数量
--ldavg-1:最后1分钟的系统平均负载(System load average)
--ldavg-5:过去5分钟的系统平均负载
--ldavg-15:过去15分钟的系统平均负载
--blocked:当前阻塞的任务数,等待I / O完成
7. 系统交换活动信息监控
例如,每10秒采样一次,连续采样3次,监控系统交换活动信息:sar -W 10 3
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
02:34:31 PM pswpin/s pswpout/s
02:34:41 PM 0.00 0.00
02:34:51 PM 0.00 0.00
02:35:01 PM 0.00 0.00
Average: 0.00 0.00
--pswpin/s:每秒系统换入的交换页面(swap page)数量
--pswpout/s:每秒系统换出的交换页面(swap page)数量
8. 设备使用情况监控
例如,每10秒采样一次,连续采样3次,报告设备使用情况,需键入如下命令:sar -d 10 3 –p
Linux 3.10.0-327.el7.x86_64 (web) 11/15/2018 _x86_64_ (6 CPU)
02:36:28 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
02:36:38 PM xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM centos-opt 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM centos-srv_ftp_wit_ftpd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM centos-srv_ftpd_log 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM centos-srv_other 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:38 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
02:36:48 PM xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM centos-opt 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM centos-srv_ftp_wit_ftpd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM centos-srv_ftpd_log 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM centos-srv_other 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:48 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
02:36:58 PM xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:58 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:58 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:58 PM centos-opt 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:58 PM centos-srv_ftp_wit_ftpd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:58 PM centos-srv_ftpd_log 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:36:58 PM centos-srv_other 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: xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-opt 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-srv_ftp_wit_ftpd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-srv_ftpd_log 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-srv_other 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
参数-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的百分比,比率越大,说明越饱和.
1. avgqu-sz 的值较低时,设备的利用率较高。
2. 当%util的值接近 1% 时,表示设备带宽已经占满。