深入了解磁盘IO —— 筑梦之路

什么是磁盘IO

磁盘 I/O(Input/Output)是指计算机系统中涉及到磁盘的数据读取和写入操作。

当计算机需要从磁盘读取数据 时,它会发起一个读取请求,磁盘会寻道并将数据传输到计算机的内存中;当计算机需要将数据写入磁盘时,它会发起一个写入请求,将数据从内存写入到磁盘中。

磁盘IO类型

1、读写I/O

计算机与外部设备(如磁盘、网络等)进行数据交换的操作,如文件系统的读写操作、网络通信中的数据收发等。

2、大小I/O

取决于控制器指令中连续读取磁盘扇区的数目大小,64、128等被认为是大I/O,4、8等被认为是小I/O。

3、连续I/O与随机I/O

访问存储设备上的数据时,通过访问的位置是连续还是随机的区分。连续I/O适用于一次性写入大量数据的场景,数据备份、流媒体等。随机I/O则相反,如数据库的查询、文件系统的操作等。

4、顺序I/O与并发I/O

顺序I/O和连续I/O类似,并发I/O指的是同时处理多个I/O的能力,通过多线程、多进程、异步I/O实现。适用于WEB服务器、数据库服务器等

磁盘IO性能指标

1、IOPS

I/O per second,即每秒钟可以处理的I/O个数。

  • r/s 每秒读次数
  • w/s ``每秒写次数
  • r/s + w/s,就是磁盘IOPS

2、吞吐量

磁盘带宽,每秒磁盘I/O的流量,即磁盘写入和读出的数据总大小。

  • rkB/s 每秒读数据量(KB单位)
  • wkB/s 每秒写数据量(KB单位)
  • rkB/s + wkB/s,就是磁盘吞吐量

3、两者联系

每秒I/O吞吐量 = IOPS * 平均I/O的大小

磁盘IO的影响

1、响应时间过长

数据读写速度慢,导致用户请求的响应时间增加。

2、系统整体性能

导致CPU和内存资源长时间等待I/O操作完成,从而降低整体的处理速度。

3、应用故障

因无法及时读写数据而出现故障或错误,影响业务的正常运行。

磁盘IO性能常用测试工具

1. iostat

iostat命令用于监控系统的磁盘I/O活动情况,可以展示磁盘的读写速率、I/O等待时间、CPU使用率等信息。

bash 复制代码
# 每1秒 输出disk相关的详细信息
iostat -x -d 1

重点关注指标:

avg-cpu段:
  %usr:CPU在用户模式下的时间百分比
  %system:CPU在系统模式下的时间百分比
  %iowait:CPU等待输入输出完成时间的百分比
Device段:
  r/s:每秒读次数
  w/s:每秒写次数,r/s + w/s就是磁盘IOPS
  rkB/s:每秒读数据量(KB单位)
  wkB/s:每秒写数据量(KB单位),rkB/s + wkB/s就是磁盘吞吐量。
###############################################
  _await:表示每一个IO请求的处理的平均时间(单位ms)
  %util 表示磁盘在采样时间内的忙碌程度

2. pidstat & iotop

pidstat是‌sysstat工具的一个命令,用于监控全部或指定进程的‌cpu、内存、设备IO等系统资源的占用情况。iotop则是实时输出读写情况。

bash 复制代码
# 每秒钟 显示每个进程的磁盘I/O统计信息
pidstat -d 1

iotop

磁盘IO故障排查思路

bash 复制代码
1、查看各磁盘设备的I/O情况

 iostat -m -x 1

2、详细定位是哪块磁盘的I/O繁忙

iostat -d /dev/sda -m -x 1

3、找出占用I/O高的应用程序

pidstat -d 1
pidstat -dt -p {PID} 1

4、进一步分析该进程及其线程在做什么?

perf或strace命令

5、查看文件句柄

lsof -p {PID/TID}

当然还有比较出名的fio、sysbench等工具可以进行磁盘IO性能测试,这里就不再赘述。

以上内容仅供参考

相关推荐
真正的醒悟2 小时前
2025【1460天】网络工程师经验之道
运维·服务器
Nimsolax2 小时前
Linux信号
linux
ajassi20006 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
JosieBook7 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
文档搬运工7 小时前
Linux MInt启动速度的优化
linux
Broken Arrows8 小时前
Linux学习——管理网络安全(二十一)
linux·学习·web安全
Light609 小时前
领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
linux·pdf·可观测性·异步队列·plt转pdf·权限治理·进度查询
羚羊角uou9 小时前
【Linux】命名管道
linux·运维·服务器
IT 小阿姨(数据库)9 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
THMAIL9 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融