一、Linux查看IO速度
Linux可以通过`dd`命令来测试磁盘IO的速度,例如测试磁盘写入速度,执行以下命令:
dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
这里会将/dev/zero设备中的数据写入到test文件中,其中`bs`是块大小,`count`是块数,`conv`是数据处理方式,`fdatasync`表示将数据同步到磁盘。执行后会看到如下输出信息:
16384+0 records in 16384+0 records out 1073741824 bytes (1.1 GB) copied, 11.3468 s, 94.6 MB/s
其中`MB/s`表示磁盘写入速度,此处为94.6MB/s。
二、Linux查看磁盘IO命令
Linux中有多个命令可以查看磁盘IO情况,其中比较常用的有`iostat`、`iotop`和`dstat`。这里简单介绍一下这几个命令。
(1)iostat
iostat -x 1
-iostat命令可以查看磁盘IO使用情况,其中`-x`参数表示显示更详细的信息。执行后会显示如下信息:
avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.01 0.01 0.00 99.99 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.03 0.00 0.04 0.01 1.65 62.33 968.10 0.00 1.71 0.73 0.00
其中比较重要的是`%iowait`和`%util`,前者表示IO等待时间的占用率,后者表示磁盘的IO使用率。此处`%iowait`为0.01%、`%util`为0%,磁盘的使用情况比较轻。
(2)iotop
iotop
iotop可以实时地查看IO的情况,并且可以根据IO情况进行排序。执行后会显示如下信息:
Total DISK READ : 20.32 K/s | Total DISK WRITE : 13.39 K/s Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 57124 be/4 root 0.00 B 24.00 K 0.00 % 0.00 % tumblerd 57689 be/4 test 4.00 K 8.00 K 0.00 % 0.00 % bash
其中显示了进程的IO情况,包括进程的ID、用户、读写速度等。
(3)dstat
dstat -d
dstat可以给出当前系统的各种状态信息,其中`-d`参数表示只显示磁盘相关的信息。执行后会显示如下信息:
---dsk/sda---- -dsk/sdb-- -dsk/sdc-- -dsk/sdd-- read writ| read writ| read writ| read writ 34M 0 | 44k 0 | 0 0 | 0 0
其中显示了各个磁盘的读写速度情况。
三、Linux查看IO使用情况
Linux可以通过`iostat`命令查看系统的IO使用情况,其中包括磁盘、CPU等方面的信息。如果想要查看某个进程的IO使用情况,可以使用`pidstat`命令。例如想要查看进程ID为1111的进程的IO使用情况,执行以下命令:
pidstat -d 1 1111
其中`-d`参数表示显示磁盘使用情况,`1`表示每秒更新一次,`1111`表示进程的ID。执行后会显示如下信息:
Linux 3.10.0-693.11.6.el7.x86_64 (localhost) 08/13/18 _x86_64_ (8 CPU) # Time UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 09:58:43 1000 1111 0.00 32.00 0.00 java 09:58:44 1000 1111 0.00 128.00 0.00 java
其中显示了进程的ID、磁盘的读写速度等信息。
四、Linux查看IO阻塞
Linux可以通过`iostat`命令查看磁盘IO的阻塞情况。例如想要查看磁盘的IO阻塞情况,执行以下命令:
iostat -xz 1
其中`-x`参数表示显示更详细的信息,`-z`参数表示将等待时间作为磁盘使用情况的一项。执行后会显示如下信息:
avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.00 0.02 0.01 0.00 99.96 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.16 0.00 0.17 0.03 3.28 71.00 1088.82 0.01 34.22 1.30 0.03
其中`%iowait`表示IO等待时间的占用率,此处为0.01%。如果`%iowait`一直比较高,说明可能存在IO阻塞情况。
五、Linux查看IO情况
Linux可以通过命令`iostat`来查看IO情况,该命令可以显示设备的IO统计信息。例如想要查看设备sda的IO情况,执行以下命令:
iostat -x 1 sda
其中`-x`参数表示显示更详细的信息,`1`表示每秒更新一次,`sda`表示要监控的设备名称。执行后会显示如下信息:
avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.02 0.00 99.98 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.01 0.00 0.11 0.00 7.12 0.00 3.19 0.20 0.00
其中显示了设备的IO情况,包括读写速率、等待时间、使用率等信息。如果发现设备的IO使用率比较高,说明设备正在被占用,需要排查一下原因。
六、Linux查看IO占用率
Linux可以通过命令`iostat`来查看IO的占用率,该命令可以显示设备的IO统计信息。例如想要查看设备sda的IO占用率,执行以下命令:
iostat -d 1 sda | awk '/sda/ {print $14}'
其中`-d`参数表示只显示磁盘相关的信息,`1`表示每秒更新一次,`sda`表示要监控的设备名称。执行后会显示当前设备的IO使用率。
七、Linux查看IO性能
Linux可以通过命令`fio`来测试磁盘的IO性能,该命令可以模拟多种IO负载场景,例如顺序读写、随机读写等等。例如模拟4K随机读写负载,执行以下命令:
fio --name=randwrite --ioengine=sync --rw=randwrite --bs=4k --numjobs=16 --size=1g --runtime=300s --time_based
其中`--name`表示任务名称,`--ioengine`表示IO引擎,`--rw`表示读写方式,`--bs`表示块大小,`--numjobs`表示线程数,`--size`表示数据量,`--runtime`表示运行时间,`--time_based`表示按时间运行而不是按次数运行。执行后会显示测试结果。
八、Linux查看IO命令
Linux可以通过命令`iostat`、`iotop`、`dstat`等来查看IO情况,同时也可以通过命令`fio`来测试IO性能。这里再列举几个命令:
(1)`cat /proc/diskstats`:查看各个磁盘的统计信息;
(2)`sar -d`:查看磁盘IO使用情况;
(3)`lsof -c <进程名>`:查看指定进程的打开的文件列表,其中也包含进行读写的文件;
(4)`strace -e trace=file <命令>`:查看命令执行时涉及到的文件IO操作。
九、Linux查看IO读写情况
Linux可以通过命令`iotop`来查看IO读写情况,该命令可以实时地显示进程的IO情况,并且可以按照IO读写速度排序。例如执行以下命令:
iotop -a
其中`-a`参数表示显示所有进程的IO情况,不仅仅是当前用户的进程。执行后会按照IO读写速度进行排序并实时显示进程的IO情况。
十、Linux查看IO负载情况
Linux可以通过命令`pidstat`来查看进程的IO负载情况,该命令可以显示进程在不同状态下的CPU、内存、IO等资源的使用情况。例如想要查看进程ID为1111的进程的IO负载情况,执行以下命令:
pidstat -d 1 1111
其中`-d`参数表示显示磁盘使用情况,`1`表示每秒更新一次,`1111`表示进程的ID。执行后会显示如下信息:
Linux 3.10.0-693.11.