使用Linux实例时,如果遇到实例运行卡顿或文件读写速度较慢等问题,可能是磁盘I/O 负载高导致,您可以参考本文内容排查并解决问题。
问题现象
使用Linux系统的ECS实例时,出现如下现象。
出现系统运行卡顿、文件读写变慢、应用性能下降或内部服务响应慢等问题。
通过ECS控制台查看实例磁盘I/O负载监控时,发现磁盘I/O负载过高(参考值:当前I/O读写≥该云盘I/O性能指标的80%,可认为I/O负载过高)。
收到了磁盘I/O负载超过设定阈值的告警信息。
可能原因
引起磁盘I/O负载过高的常见原因如下:
异常的进程或服务占用大量磁盘I/O,导致磁盘I/O负载过高。
业务程序及业务场景对实例的磁盘I/O负载要求较高,实例的磁盘I/O性能不足以支撑业务开展所需的磁盘I/O性能要求。
解决方案
要定位磁盘I/O负载过高的问题,您可以参见下述操作步骤进行问题的排查定位。
使用iostat查看整体磁盘I/O负载
iostat是一款Linux系统中监控I/O性能的工具,可以查看磁盘整体I/O负载情况。
执行如下命令,查看系统I/O负载情况。
sudo iostat -d -m 3 5
说明-d:仅显示设备统计信息,不显示CPU使用情况。
-m:以MB为单位显示。
3:统计时间间隔。
5:统计次数。
回显结果示例如下。
Linux 5.10.134-18.al8.x86_64 (iZbpxxxxxxxxxxxxxxxaqhZ) 04/07/2025 _x86_64_ (4 CPU) Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 145.67 0.00 126.81 0 380 vdb 0.00 0.00 0.00 0 0 Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 161.33 0.00 127.24 0 381 vdb 0.00 0.00 0.00 0 0 ......
显示结果中各项参数说明如下。更多参数说明,请运行
man iostat
查看。Device:磁盘名称。
tps:每秒I/O请求数。
MB_read/s:每秒文件读取速度。
MB_wrtn/s:每秒文件写入速度。
MB_read:读取的文件大小。
MB_wrtn:写入的文件大小。
若检测到磁盘I/O实际性能显著低于阿里云官方公布的块存储服务性能指标,建议您优先检查磁盘分区是否完成4K对齐。通过确认分区对齐状态,可快速定位因对齐配置不当导致的性能损耗问题。
关于块存储性能的更多信息,请参见块存储性能。
使用iotop查看进程的磁盘IO负载
iotop是一个用来监视磁盘I/O使用状况的工具,可以查看单个进程的磁盘IO负载。
执行如下命令,安装iotop。
Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y iotop
Ubuntu / Debian
sudo apt install -y iotop
openSUSE
sudo zypper install -y iotop
执行如下命令,查看磁盘I/O负载。
sudo iotop -P -k -d 3
说明-P:显示PID。
-k:以KB为单位显示。
-d:统计时间间隔,单位为秒,默认值为1。
回显结果示例如下。如需退出程序,请按
q
键。Total DISK READ : 0.00 K/s | Total DISK WRITE : 80373.45 K/s Actual DISK READ: 0.00 K/s | Actual DISK WRITE: 127781.85 K/s PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 17250 be/4 root 0.00 K/s 80354.87 K/s 0.00 % 95.99 % dd if=/dev/zero of=/mnt/dev_vdb/swap bs=1M count=10240 15192 be/3 root 0.00 K/s 6.64 K/s 0.00 % 60.56 % [jbd2/vdb1-8] 17152 be/4 root 0.00 K/s 0.00 K/s 0.00 % 59.55 % [kworker/u8:0 ......
关于回显结果的参数说明如下,更多参数说明,可执行
iotop -h
查询。PID:进程ID。
DISK READ:进程读操作的I/O速度。
DISK WRITE:进程写操作的I/O速度。
SWAPIN:进程等待从交换空间(Swap Space)换入(Swap In)内存页面所占用的 CPU 时间百分比。
IO>:进程因 I/O 等待所占用的 CPU 时间百分比(包括 Swap 换入和磁盘 I/O 等待)。
COMMAND:进程的命令名称。
如果定位到kjournald进程占用较高磁盘I/O资源,建议修改对应分区的Journal size参数解决该问题。具体操作,请参见kjournald进程占用较高磁盘I/O资源问题处理。
处理磁盘I/O负载高的问题
常见磁盘I/O负载高问题原因及解决方案如下。
问题现象 | 原因 | 解决方案 |
异常用户程序或进程长时间占用大量磁盘I/O资源。 | 该程序为异常程序或进程,运行时占用过多磁盘I/O资源。 | 通过在iotop工具定位到占用磁盘I/O资源较多的程序的PID,并通过 警告 在您结束进程前,请务必确保您了解该进程的相关信息,避免因误操作导致您的业务中断。 |
正常用户程序或进程长时间占用大量磁盘I/O资源。 | 该程序为正常业务程序或进程,运行时占用过多磁盘I/O资源。 | 如果云盘出现磁盘I/O性能瓶颈,您可以根据实际情况选择对应的处理方案:
|
| 当前实例的服务正常运行所需磁盘I/O资源性能大于实例的磁盘I/O性能。 |
常见问题
检查磁盘分区是否完成4K对齐
kjournald进程占用较高磁盘I/O资源问题处理
相关文档
关于Windows系统磁盘I/O负载高的问题排查定位,请参见Windows系统磁盘I/O负载较高问题的排查及解决方案。
关于如何使用atop工具监控Linux系统指标的更多信息,请参见使用atop工具监控Linux系统指标。