持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
上一篇提到CPU的一些监控操作,本篇来看下关于磁盘的内容。监控磁盘的使用率非常关键,无论是应系统的系统日志,还是各种数据库,甚至中间件的持久化操作,都会涉及到磁盘IO。
其实多数情况下我们要考虑的还是应用本省。如果应用的业务是做磁盘的大量IO,那么磁盘的IO性能, 就可能称为系统的瓶颈。
Linux的磁盘监控
我们可以通过iostat查看系统的磁盘IO。iostat 主要用于输出磁盘IO 和 CPU的统计信息。
首次使用需要我们安装一下,它是属于sysstat软件包,安装如下:
yum install sysstat
使用帮助如下:
[root@hecs-402944 ~]# iostat -help
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <用户组名> ] [ -p [ <设备> [,...] | ALL ] ]
[ <设备> [...] | ALL ]
其中选项的含义如下:
-c: 显示CPU使用情况-d: 显示磁盘使用情况-N: 显示磁盘阵列(LVM) 信息-n: 显示NFS使用情况-k: 以 KB 为单位显示-m: 以 M 为单位显示-t: 报告每秒向终端读取和写入的字符数和CPU的信息-V: 显示版本信息-x: 显示详细信息-p: 磁盘显示磁盘和分区的情况
使用方式如下:
[root@hecs-402944 ~]# iostat -xm
Linux 3.10.0-1160.15.2.el7.x86_64 (hecs-402944) 2022年05月30日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.32 0.00 0.12 0.01 0.00 99.55
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.48 0.00 0.68 0.00 0.01 16.94 0.00 1.29 4.03 1.28 0.93 0.06
上面分别展示了cpu和磁盘的信息,-xm表示以M为单位的详细信息,其含义如下:
rrqm/s:每秒进行 merge 的读操作数目。wrqm/s每秒进行 merge 的写操作数目。r/s每秒完成的读 I/O 设备次数。w/s每秒完成的写 I/O 设备次数。rMB/s每秒读M字节数。wMB/s每秒写M字节数。avgrq-sz平均每次设备I/O操作的数据大小 (扇区)。avgqu-sz平均I/O队列长度。rsec/s每秒读扇区数。wsec/s每秒写扇区数。await平均每次设备I/O操作的等待时间 (毫秒)。r_await每个读操作平均所需的时间,不仅包括硬盘设备读操作的时间,还包括了在内核队列中等待的时间。w_await每个写操作平均所需的时间。不仅包括硬盘设备写操作的时间,还包括了在内核队列中等待的时间。svctm平均每次设备I/O操作的服务时间 (毫秒)。util一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
通过上面的参数返回值,我们可以发现当前磁盘存在的问题。
比如当util达到100%,那说明磁盘已经满负载了。同时iowait的百分比很高,说明有线程正在等待磁盘IO。
除此之外,监控磁盘还能够监控系统是否在进行内存交换
计算机的内存是固定大小的,但是可以使用更大的磁盘作为虚拟内存来运行应用,操作系统可以将暂时不用的内存保存在磁盘上,在需要时换页到物理内存当中。
通常来说,这种虚拟内存的方式更加适用于我们的笔记本,对于服务器来说,效果并不是很好。比如我们运行在虚拟机上的java程序。
正在进行内存交换的应用,无论是数据从内存到磁盘,还是磁盘到内存,性能都比较差。
我们前面使用的命令vmstat,其中的si,so就分别反映了内存交换式时,是换进,还是换出。