Linux 性能命令-总结篇–iostat & sar 命令

[iostat]

用来报告 CPU统计,设备分区的IO统计




iostat是I/O statistics(输入/输出统计)的缩写,用来动态监视系统的磁盘操作活动。

iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息

参数:

iostat -C 显示CPU使用情况




avg-cpu: %user %nice %system %iowait %steal %idle

0.63 0.00 0.24 0.24 0.00 98.89

%user 显示在用户级(应用程序)执行时CPU利用率的百分比。

%nice CPU处在带NICE值的用户级下的CPU利用率百分比

%system CPU处在内核的CPU利用率百分比。

%iowait 显示系统磁盘I/O期间,CPU或CPU空闲的时间百分比请求。

%steal 显示虚拟CPU或CPU在管理程序为另一个虚拟处理器提供服务时非自愿等待的时间百分比

%idle CPU空闲时间百分比。




如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,

如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。

%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。%idle小于70% IO压力就较大了,一般读取速度有较多的wait。 同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)




iostat -d -x




Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util



sda 0.01 0.38 1.63 0.35 26.22 11.34 37.94 0.02 8.85 10.59 0.71 1.69 0.34




rrqm/s: 每秒合并读操作的次数

wrqm/s: 每秒合并写操作的次数




r/s: 每秒完成的读 I/O 设备次数。即 rio/s

w/s: 每秒完成的写 I/O 设备次数。即 wio/s




rsec/s: 每秒读扇区数。即 rsect/s

wsec/s: 每秒写扇区数。即 wsect/s




rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

wkB/s: 每秒写K字节数。是 wsect/s 的一半。




avgrq-sz: 每个IO的平均扇区数,即所有请求的平均大小,以扇区(512字节)为单位

avgrq-sz这个值反应了用户的IO-Pattern。我们经常关心,用户过来的IO是大IO还是小IO,那么avgrq-sz反应了这个要素。它的含义是说,平均下来,这这段时间内,所有请求的平均大小,单位是扇区,即(512字节)




avgqu-sz: 平均为完成的IO请求数量,即平均意义上的请求队列长度.

该值越大,表示排队等待处理的io越多




await: 平均每个IO所需要的时间(毫秒),包括在队列等待的时间,也包括磁盘控制器处理本次请求的有效时间

await 包括

r_wait:每个读操作平均所需要的时间,不仅包括硬盘设备读操作的时间,也包括在内核队列中的时间。

w_wait: 每个写操平均所需要的时间,不仅包括硬盘设备写操作的时间,也包括在队列中等待的时间

svctm: 平均每次设备I/O操作的服务时间 (毫秒)。




%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比




tps:该设备每秒的传输次数。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”(a transfer)请求的大小是未知的




如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。




svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加




如果 svctm 比较接近 await(scvtm<=await),说明 I/O 几乎没有等待时间;




await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间




如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。




如果avgqu-sz比较大,也表示有大量IO在等待



avgqu-sz 就像超市结账排队的队伍长短一样,队伍越长等的时间越长,反之一样。

avgrq-sz 代表队伍平均每个人买东西的多少,如果每个人买东西都一推车的,那么结账的速度就慢




设备IO操作:总IO(io)/s = r/s(读) +w/s(写)




形象的比喻:

  • r/s+w/s 类似于交款人的总数
  • 平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
  • 平均服务时间(svctm)类似于收银员的收款速度
  • 平均等待时间(await)类似于平均每人的等待时间
  • 平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
  • I/O 操作率 (%util)类似于收款台前有人排队的时间比例

[sar] sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。 sar -u : 默认情况下显示的cpu使用率等信息
%user 用户模式下消耗的CPU时间的比例;

  • %nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
  • %system 系统模式下消耗的CPU时间的比例;
  • %iowait CPU等待磁盘I/O导致空闲状态消耗的时间比例;
  • %steal 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;
  • %idle CPU空闲时间比例;
sar -q: 查看平均负载

指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等;与其它命令相比,它能查看各项指标随时间变化的情况;

  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
  • ldavg-15:过去15分钟的系统平均负载
sar -r: 指定-r之后,可查看物理内存使用状况;

  • 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 -W:查看页面交换发生状况 页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换; pswpin/s:每秒系统换入的交换页面(swap page)数量 pswpout/s:每秒系统换出的交换页面(swap page)数量

参考资料:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html
http://bean-li.github.io/dive-into-iostat/
man 手册

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注