sar主要用于收集并统计系统资源的信息,包括CPU、IO、内存、网卡流量等。
vmstat命令主要是对操作系统的虚拟内存、进程、IO读写、CPU活动等整体情况进行统计。但是它不能对某个进程进行深入分析。
iostat用于输出CPU和磁盘I/O相关的统计信息
top命令动态展示系统整体资源和各个进程资源占用状况,是Linux下常用的性能分析工具。
sar语法用法:sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
常用选项说明:
-u 输出整体CPU的使用情况,默认值。 -d 显示各个磁盘的统计信息 -p 以sdX的形式显示设备名称,不带该参数,设备显示是dev2-8、dev2-9等,不易识别。 -b 显示磁盘I/O的使用情况: -r 显示内存统计信息 -P ALL 显示每个内核统计信息: -n 显示网络使用情况,-n后接关键词”DEV”可显示eth0、eth1等网卡的信息: -o sar输出信息保存到指定的文件常用实例
1、cpu整体使用情况统计(sar 2 3 /sar -u 2 3)
$ sar 2 3 Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos) 2017年10月22日 _x86_64_ (4 CPU) 10时43分18秒 CPU %user %nice %system %iowait %steal %idle 10时43分20秒 all 0.63 0.00 0.38 0.00 0.00 99.00 平均时间: all 0.75 0.00 0.42 0.29 0.00 98.54
%user: 用户态下CPU使用时间比率 %system: 内核态下CPU使用时间比率 %iowait: CPU等待I/O占用时间比率 %idle: CPU空闲时间比率
2、各磁盘IO使用情况统计(sar -d -p 1 2)。
$ sar -d -p 1 2 Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos) 2017年10月22日 _x86_64_ (4 CPU) 10时45分52秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10时45分53秒 vda 2.00 0.00 24.00 12.00 0.03 13.00 6.50 1.30 10时45分53秒 vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时45分53秒 vdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 平均时间: vda 1.00 0.00 12.00 12.00 0.01 13.00 6.50 0.65
输出说明:
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的百分比,比率越大,说明越饱和.
3、内存使用情况统计(sar -r 1 2 )
$ sar -r 1 2 Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos) 2017年10月22日 _x86_64_ (4 CPU) 10时46分51秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 10时46分53秒 146952 7863576 98.17 1083660 3756212 5873504 73.32 4508752 2539468 128 平均时间: 146952 7863576 98.17 1083660 3756210 5873504 73.32 4508746 2539470 128
输出说明
kbmemfree 空闲物理内存 kbmemused 已使用物理内存 %memused 已使用内存占总内存百分比 kbbuffers Buffer Cache大小 kbcached Page Cache大小 kbcommit 应用程序当前使用内存大小 %commit 应用程序使用内存百分比
4、网卡流量使用情况统计(sar -n DEV 1 2)
$ sar -n DEV 1 2 Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos) 2017年10月22日 _x86_64_ (4 CPU) 10时47分51秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10时47分52秒 eth0 42.00 39.00 13.06 11.54 0.00 0.00 0.00 10时47分52秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均时间: eth0 29.50 29.50 8.98 9.56 0.00 0.00 0.00
输出说明
IFACE: 网络接口名称 rxpck/s: 每秒收包的数量 txpck/s: 每秒发包的数量 rxkB/s: 每秒收的数据量(kB为单位) txkB/s: 每秒发的数据量(kB为单位) rxcmp/s:每秒钟接收的压缩数据包 txcmp/s:每秒钟发送的压缩数据包 rxmcst/s:每秒钟接收的多播数据包
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
使用实例
1、vmstat 1 2,每秒收集1次统计信息,总共收集2次。这是最常用的实例,不带选项。
$ vmstat 1 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 142524 1499664 4028148 0 0 38 42 7 9 1 1 98 0 0 0 0 0 141764 1499664 4028160 0 0 0 0 1123 2025 1 1 99 0 0
以上各列含义
procs: r 表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,说明CPU不足。 b 表示等待资源的进程数,比如正在等待I/O、或者内存交换等。 memory: swpd 虚拟内存使用量。即切换到内存交换区的内存数量。如果大于0,表示机器物理内存不足。 free 空闲物理内存 buff 作为buff使用的内存 cache 作为cache使用的内存 swap: si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够或者内存泄露了,要查找耗内存进程解决掉。 so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。iostat语法
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示内存不足。
IO: bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte bo 块设备每秒发送的块数量
设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。 system: in 每秒CPU的中断次数,包括时间中断。 cs 每秒上下文切换次数
这两个值越大,内核消耗的CPU就越多 cpu: us 用户进程消耗的CPU时间百分比,us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法 sy 内核进程消耗的CPU时间百分比,sy值如果太高,说明内核消耗CPU资源很多,例如是IO操作频繁。 id CPU处于空闲状态的时间百分比。 wa io等待所占用的时间百分比,wa值越高,说明IO等待越严重,根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的
原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)
用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]
常用选项说明:
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果 -d:单独输出Device结果,不包括cpu结果 -k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位 -x:输出更详细的io设备统计信息 interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出
说明:更多选项使用使用man iostat查看
常用实例1、iostat,结果为从系统开机到当前执行时刻的统计信息
$ iostat Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos) 2017年10月22日 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 1.49 0.00 0.65 0.29 0.00 97.58 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 3.27 6.38 48.27 7044109 53255704 vdb 0.00 0.00 0.00 944 0 vdc 12.22 145.74 120.85 160792201 133326268
输出含义:
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。
Device: 各磁盘设备的IO统计信息。各列含义如下:
Device: 以sdX形式显示的设备名称 tps: 每秒进程下发的IO读、写请求数量 Blk_read/s: 每秒读扇区数量(一扇区为512bytes) Blk_wrtn/s: 每秒写扇区数量 Blk_read: 取样时间间隔内读扇区总数量 Blk_wrtn: 取样时间间隔内写扇区总数量
2、iostat -x -k -d 1 2。每隔1S输出磁盘IO的详细详细,总共采样2次。
$ iostat -x -k 1 2 Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos) 2017年10月22日 _x86_64_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 6.85 0.67 2.60 6.38 48.27 33.39 0.02 5.72 5.46 5.78 0.27 0.09 vdb 0.00 0.00 0.00 0.00 0.00 0.00 14.75 0.00 1.55 1.55 0.00 1.55 0.00 vdc 0.06 14.87 6.91 5.31 145.72 120.84 43.62 0.11 9.04 9.92 7.89 0.89 1.09 avg-cpu: %user %nice %system %iowait %steal %idle 0.50 0.00 0.25 0.00 0.00 99.25
以上各列的含义如下:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并 wrqm/s: 每秒对该设备的写请求被合并次数 r/s: 每秒完成的读次数 w/s: 每秒完成的写次数 rkB/s: 每秒读数据量(kB为单位) wkB/s: 每秒写数据量(kB为单位) avgrq-sz:平均每次IO操作的数据量(扇区数为单位) avgqu-sz: 平均等待处理的IO请求队列长度 await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位) svctm: 平均每次IO请求的处理时间(毫秒为单位) %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
重点关注参数
1、iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
2、avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
3、await 表示每次IO请求等待时间,包括等待时间和处理时间
4、svctm 表示每次IO请求处理的时间
5、%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
top命令语法
使用格式:top [-] [d] [b] [H] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d 指定每次屏幕刷新间隔时间。 p 通过进程ID查看指定进程的状态。 n 刷新次数,完成后自动退出 b 批次模式,搭配"n"参数一起使用,可以用来将top的结果重定向到文件 H 查看线程占用资源状态 u 查看指定用户进程占用资源情况 c 显示整个命令行而不只是显示命令名
查看进程ID为6663的资源占用情况,每隔2秒刷新一次,总共查看10次
top -b -p 6663 -d 2 -n 10 top -b -p 6663 -d 2 -n 10 > data.txt #重定向到文件
查看进程ID为6663的线程资源占用情况,性能测试常用。区别就是加参数-H
top -b -H -p 6663 -d 2 -n 10 top -b -H -p 6663 -d 2 -n 10 > data.txt #重定向到文件
top - 07:09:37 up 1 day, 17:43, 14 users, load average: 0.00, 0.03, 0.05 Tasks: 145 total, 1 running, 144 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st Mem : 8010528 total, 126708 free, 1172488 used, 6711332 buff/cache Swap: 0 total, 0 free, 0 used. 6498684 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9411 root 20 0 7076 5988 484 S 0.3 0.1 4:45.07 top 9422 root 20 0 34604 13060 1196 S 0.3 0.2 6:07.28 sshd 1 root 20 0 43200 2952 1796 S 0.0 0.0 0:13.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.53 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.45 migration/0
第1行:load average: 0.00, 0.03, 0.05。系统负载统计汇总
load average,表示系统负载(任务队列的平均长度), 三个数值分别为1、5、15分钟前到现在的平均值。如果这个数除以逻辑CPU个数,结果高于5就表明系统在超负荷运转。
第3行:Cpu(s): 0.7 us, 0.3 sy, 0.0 ni,99.0 id, 0.0 wa, 0.0 hi, 0.0 si。CPU使用信息汇总
us 用户空间占用CPU百分比 sy 内核空间占用CPU百分比 ni 用户进程空间内改变过优先级的进程占用CPU百分比 id 空闲CPU百分比 wa I/O等待的CPU时间百分比 hi 硬件CPU中断占用百分比 si 软中断占用百分比 st 虚拟机占用百分比
第4行:Mem: 8010528 total, 126708 free, 1172488 used, 6711332 buff/cache。内存使用情况汇总。
第5行:Swap: 0 total, 0 free, 0 used. 6498684 avail Mem。交换空间使用情况汇总。
进程资源占用情况各字段含义解读
PID 进程id PPID 父进程id USER 进程所有者的用户名 PR 优先级 NI nice值。负值表示高优先级,正值表示低优先级 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR 共享内存大小,单位kb S 进程状态。D为不可中断的睡眠状态 R为运行 S为睡眠 T为跟踪/停止 Z为僵尸进程 %CPU 上次更新到现在的CPU时间占用百分比 TIME 进程使用的CPU时间总计,单位秒 TIME+ 进程使用的CPU时间总计,单位1/100秒 %MEM 进程使用的物理内存百分比 COMMAND 进程名称