vmstat命令和iostat命令
作者:快盘下载 人气:vmstat命令和iostat命令
在做数据库维护的时候,经常会查看操作系统的状态,今天我们说下常见的命令iostat和vmstat。
01
iostat命令
这个命令一般会搭配iotop命令来看,从命名中不难看出,它主要反馈的是操作系统的io信息。如果你的操作系统没有安装这个工具,可以使用下面的方法来进行安装:
yum install sysstat -y
iostat工具执行完毕之后,一般会对我们返回一个报告,这个报告反馈的是自从系统启动以来的很多计数器的平均值,看起来没有什么意义,我们通常更关注IO指标的持续性变化,可以使用下面的命令来查看IO的增量变化情况,其中:
-dx 代表展示详细数据
1 代表间隔1s展示一次
[root@ ~]# iostat -dx 1 Linux 3.10.0-957.21.3.el7.toa.x86_64 (dbl-10-41-28-88.dbnorth-1.node.kubernetes) 05/17/2022 _x86_64_ (40 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 sda 0.01 11.86 14.68 29.56 394.94 212.73 27.47 0.04 0.96 2.45 0.22 0.24 1.08 sfd0n1 0.00 0.00 196.24 2196.17 3529.64 14200.25 14.82 0.04 0.01 0.28 0.01 0.01 3.03 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.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sfd0n1 0.00 0.00 82.00 608.00 1308.00 4692.00 17.39 2.07 1.90 0.21 2.12 1.43 98.80 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.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sfd0n1 0.00 0.00 178.00 801.00 1780.00 7892.00 19.76 2.38 1.71 0.20 2.04 1.02 99.50 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.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sfd0n1 0.00 0.00 105.00 673.00 1372.00 8208.00 24.63 2.30 2.00 0.14 2.29 1.29 100.00
通常情况下,iostat返回的第一波数据没有参考意义,因为它代表的是机器启动以来,所有指标的平均值。
我们从第二波数据开始看:
rrqm/s和wrqm/s:
他们代表每秒合并的读和写请求。这个数字代表操作系统拿出来多少个逻辑请求合并为一个物理请求到实际磁盘。
r/s和w/s:
每秒发送到设备的读和写请求。这个值具有重要的参考意义。
rkB/s和wkB/s:
意为每秒读写的kB字节数。
avgrq-sz和avgqu-sz:
分别代表请求的扇区数和在设备队列中等待的请求数。通常这俩值越小越好。
await、r_await、w_await
代表磁盘排队上花费的时间值,单位是ms
svctm:
服务请求花费的时间值,单位ms
%util:
这是一个重要的值,它代表至少有一个活跃请求所占时间的百分比。它其实不是设备的利用率。%util的值不会超过100%。
如果这个值是0%,代表统计时间段内,磁盘一直没有数据写入;
如果这个值是100%,代表统计时间段内,磁盘一直有数据写入;
简而言之,它代表统计时间内所有处理IO时间,除以总共统计时间。
02
vmstat命令
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。
我们使用下面的例子,让他每间隔1s输出一次报告:
[root@~]# vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 7 0 2308340 2381212 546140 28582468 0 0 2 40 0 0 48 13 39 0 0 10 0 2308340 2402408 546144 28583032 0 0 0 420 18607 35079 39 17 45 0 0 17 0 2308340 2279524 546152 28583444 0 0 4 1140 23360 15603 51 20 29 0 0 11 0 2308340 2190988 546152 28583812 0 0 0 4 26816 34006 82 15 3 0 0 11 0 2308340 2177512 546160 28583724 0 0 0 16 23183 38874 59 23 18 0 0 13 0 2308340 2163024 546164 28583788 0 0 4 24 22102 28218 51 19 30 0 0 6 0 2308340 2187564 546168 28584016 0 0 0 596 15855 19528 43 15 42 0 0 8 0 2308340 2236964 546208 28574064 0 0 0 3032 15622 27785 41 15 44 0 0 4 0 2308340 2349828 546208 28574036 0 0 4 4 20172 32157 49 18 33 0 0 5 0 2308340 2350252 546208 28574076 0 0 0 460 15519 14972 41 15 44 0 0
同样,和iostat一样,第一行的数据,通常显示的是历史平均值,参考意义不大。
看第二行的值:
procs:
r列代表了多少进程在等待cpu
b列代表了多少进程正在不可中断的休眠
memory:
swpd列显示多少内存块被换出到了磁盘,通常这个值越小越好
free列代表有多少数据块是空的
buff列代表有多少数据块正在被用作缓冲
cache列代表由多少数据款正在被操作系统缓存
swap:
这些列显示了系统的交换活动,si和so代表每秒正在被从磁盘换入和换出的数据块个数,如果这个值超过10,那么说明系统内存不足。
io:
显示有多少数据块从块设备读取和写入。它代表磁盘的IO
system:
显示了每秒中断(in)和上下文切换(cs)的数量。
cpu:
us:用户代码(非内核耗时)
sy:执行系统代码(内核耗时)
id:空闲耗时
wa:等待IO的耗时
03
总结
Linux中,查看操作系统运行状态的命令有很多,除了文中提到的两个,还有mpstat、dstat、sar、top、iotop等等。这些命令各有利弊,可以根据实际情况酌情使用。
如果遇到不理解的参数,可以通过man+命令的方法来查看帮助文档,他们往往是宏观上分析排查数据库问题的利器。
加载全部内容