linux系统资源分析 - 磁盘IO篇

article/2025/11/5 19:08:03

目录

一、理解磁盘IO

二、普通文件IO调度

三、磁盘阵列

四、常用命令

4.1 iostat命令详解

五、综合案例(内存&IO)


一、理解磁盘IO

以超市结账为例,来理解磁盘IO的队列情况(结账付款时间 = 等待时间 + 服务时间)

  • 交款总人数(排队的人数多,处理慢)
    • 对应到IO,IO请求数多,我的系统处理能力怎么样?
  • 个人买东西的数量(前面人买的东西多,处理慢)
    • 对应到IO,单次写入量大 和 单次写入量小,处理能力怎么样?
  • 结账人员熟练程度(收营员的处理能力)
    • 对应到IO,系统不同的硬盘处理空间不一样,处理能力也不一样
  • 超市队列的有几个(队列越多,处理能力越快)
    • 对应到IO,有几个IO队列?
  • 该队列有人在等待服务(一个队等的人多,一个队等的人少)
    • 对应到IO,有多少请求在当前等待的?
  • 其他条件影响(活动 [超市促销] ,服务时间波动 [早上9点与晚上9点的区别]  )等等...

总结:IO队列越少,处理能力越快。单次写入量少,处理能力越快

二、普通文件IO调度

存储通过网络进行传输。从文件系统开始 ---> 存储 ---> 磁盘文件系统 ---> 设备块层 ---> IO 调度层---> 最终写到磁盘空间
IO操作过程:

  • 首先调用系统函数接口read() 或 write() 
  • 生成一次IO 请求
  • 放入具体磁盘的IO队列中

三、磁盘阵列

如图,磁盘阵列情况。描述raid0、raid1、raid10、raid5 他们的一些关系,如下:

  • 两块硬盘组成raid1。磁盘利用率,完全备份冗余,各50%
  • raid0 只保证了效率,没有备份,没有冗余

针对上面两种情况,出现raid10,raid1 安全性(完全冗余备份),raid0(随机型,通过两边来提效),最终raid10 既有容量,也有速度 【牺牲容量,来换速度】

上图中的raid5,通过一块磁盘冗余,其他磁盘工作 【disk0做冗余,其他3块磁盘都用来写】

四、常用命令

  • df -h  # 显示磁盘和文件信息
  • du -sh *   # 统计当前目录下每个文件或者目录的大小
  • du -sh * | grep M  # 按文件大小排序
  • mount  # 挂载光盘(衍生挂载远端的共享文件)
    • mount -t nfs 10.6.157.67:/home/work/ /home/lwan/workspace 【实现远端的挂载】

如果是挂载远端文件会对哪些地方有影响?

  • 首先要读要写, IO有影响
  • 挂载的文件读远端的东西,以及要写,写了之后要同步,牵扯到sync 同步,牵扯到网络资源
  • 分析的时候,要根据不同的情况,分成本地IO和网络IO来进行分析

什么时候用挂载,挂载能解决什么问题?

  • 文件共享
    • 文件资源上的问题
    • 镜像文件【rpm包,代码,日志,系统应用】
  • 磁盘不足
    • 硬盘空间只有2个G,挂一个1T的硬盘,可以往1T的硬盘随便写

找到大文件(500MBfile文件),如果磁盘已经100%了,应该怎么删除?

rm -rf 500MBfile是否正确?如果这样删,会发现空间还是没有释放。节点映射的文件并没有真正的删除(软硬连接)

正确的删除方法是:> 500MBfile  # 用覆盖的方法把文件给删除,磁盘文件清除掉

4.1 iostat命令详解

-x 显示扩展的统计信息   -k 显示统计数据字节每秒   -d 显示设备利用率报告

  •  rkB/s 和 wkB/s  读 和 写 的速率
    • 与IO超市模型哪个条件关联上?  --->与个人买东西的数量(单次写入量的大小)有关
  • r/s 和 w/s 每秒向该设备发出的 读 和 写请求数
    • 与IO超市模型哪个条件关联上?  --->与交款总人数(发了多少次请求)有关
  • avgqu-sz 该设备的请求队列的平均长度,avgrq-sz  读请求的平均大小(单位是扇区)
    • 与IO超市模型哪个条件关联上?  --->超市队列有几个队列
  • svctm 设备的平均服务时间(毫秒为单位)
    • 与IO超市模型哪个条件关联上?  --->结账人员熟练程度(系统不同的硬盘处理空间不一样,处理能力也不一样)
  • await 设备发出I/O请求经过的平均时间(毫秒为单位)【这里是服务时间与队列中的等待时间的总和】
  • %util 在I/O请求发送到设备期间,占用CPU时间的百分比。用于显示设备的带宽利用率。当这个值接近100%时,表示设备带宽已经占满

根据上面各字段的解释,可以得出以下几个问题的思考:

该队列等了多久(有多少请求在当前等待的)?【await-svctm 请求经过的平均时间 - 平均服务时长】

  • await 越小越好
  • await = svctm  # 说明系统在处理数据的时候,没有等待过,最好

根据上图,可以得出队列的等待时间,为 4.17ms - 1.14ms =3.03ms。3.03ms的值越大越好,还是越小越好? 结论是,越小越好,说明请求快,处理能力也同样快

举例理解上述结论:如果写10M数据,希望await - svctm 是1ms处理完好,还是1000ms处理完好?结论当然是1ms处理完好,说明处理数据快。

五、综合案例(内存&IO)

案例1:top 命令中的RES + Swap 是进程实际使用的内存,VIRT(对应的是虚拟地址空间),VIRT如何理解与分析?

举例说明(买房子,总价100W),可选方案:

  • 首付3成 30W
    • 现金20W(free +buff/cache),借同事10W(swap)
    • 现金25W,借同事5W
  • 首付6成 60W
  • 全款 100W 

cat /proc/1/status【该命令下,有以下重要信息】

结合上面举例说明的故事(买房),VIRT反应的是总帐。比如程序在申请进程的时候,申请了300M,实际用了1个G,VIRT对应的是总账。

  • VmPeak  峰值,反应进程最终占用峰值的内存(类似于买房需要缴税)
  • Vmsize 反应进程需要用到的总内存数(类似于房子的总价)
  • VmRSS与VmSwap 反应的是系统怎么组合来满足进程实际需要用到的内存(类似于买房你是首付,还是全款)

VIRT的作用:
通过举例,比如买房,买车,日常开支。可以得出,我们最大能用到的钱(内存)都是 mem.total +swap.total(最大200W),需要一个整体预估的值(如买房预估210W,实际只花了100W)

系统参数需要设置,允许超过设置申请内存 swap + mem 【sar -r 1】%commit

  • vm.overcommit_memory =0【默认是0】【2 是永远不可以overcommit】

案例2:根据下图,我们可以对IO进行分析并得出哪些结论

  • 在同等情况下,await 等待时间越短越好,处理能力越好
  • 请求多相同的情况下,还要衡量他们的差异(如svctm服务时长,为什么相差2.5Ms),需要去分析原因:
    • 有可能是IO完成以后唤醒CPU等待时间太长
    • await 相同说明任务队列长度
    • svctm有可能是"叫号"的时间,2.5svctm有可能是正在处理的服务时间(具体问题具体分析)

根据上述原因,去分析和优化,因为等待和处理是一个完整的请求。

  • 两组对比出来,下面一组IO块设备处理能力强,但CPU能力弱。上面一组,IO块设备处理能力弱(主要留意svctm上下组之间的差异,比如相差5,10倍等就比较明显异常)
  • 也不是绝对的说,await接近或等于svctm就一定好(相同的情况下,有些可能花在流程上的时间比较长,有些可能从队列到服务池所花费的时间比较长),这些场景都需要去优化

案例3:对于超市(IO)队列的理解

  • 队列越多越好,还是越少越好?队列长度(avgqu-sz)  --->越少越好
    • 0等待最好,队列少好,说明处理能力强
    • 同等情况下,avgqu-sz等的越多,表示排的越长,说明处理能力差
  • 平均的请求队列(avgrq-sz)

同样是排两个队,第一个来了1380人,而第二个来了380,服务时间和等待时间都一样,所以说明,第一个处理能力最好

  • IO监控时,首先当%util 比较大时,需要去关注,再去详细的分析命令下的其他细分指标
  • top中的wa指标与iostat %util的区别
    • 都反应了IO的实时情况,但在做IO分析时,iostat的实时数据,信号会更强烈一些
  • IO最终反应到程序上面,甚至反应到文件上
    • 跟处理能力有关系(是持续性的,还是波动性的)

当观察IO系统很忙时,如何下一步分析(找进程、找文件):

  • 找进程【dstat --top -io 、 iotop】
    • 也可以通过isof 命令找文件变化最大的,在找进程
  • 找文件【两个方法】
    • 方法一:
      • echo 1 > /proc/sys/vm/block_dump 【改内核,dump下设备块的写入信息】
      • dmesg -c > diskio.log 【执行内核命令,把内核的数据写到一个文件中去】
    • 方法二
      • 找到进程后,通过shell脚本模拟IO写数据
        • for((i =1; i<100000;i++));do echo $i >>log.txt sleep 1; done
      • px aux |grep 进程
      • strace -ttt -f -p 进程号

关键字 open write read 等,就能知道该进程下在对文件进行什么样的操作,获得文件
通过上述命令,就可以对IO进行监控分析。


http://chatgpt.dhexx.cn/article/C2QoAa5P.shtml

相关文章

网络I/O与磁盘I/O

目录 一、同步&异步 阻塞&非阻塞二、网络I/O1. BIO2. NIO3. 多路复用器3.1 select & poll3.2 epoll3.3 Redis的IO多路复用 4. Reactor模型5. Netty 三、磁盘I/O1. 缓存I/O2. Direct I/O3. mmap4. write、flush、fsync 一、同步&异步 阻塞&非阻塞 参考&…

Linux 查看磁盘IO的使用

我们在线上linux服务器排查问题时&#xff0c;一般会通过top、free、netstat、df -h等命令排查cpu、内存、网络和磁盘等问题。有的时候我们需要更进一步了解磁盘io的使用情况&#xff0c;那么本文就是重点讲解一下如何查看linux的磁盘io信息的。 1.iostat&#xff1a; 1.1 命…

磁盘IO和网络IO

4、IO访问方式 4.1 磁盘IO 具体步骤&#xff1a; 当应用程序调用read接口时&#xff0c;操作系统检查内核缓冲区中是否存在需要的数据&#xff0c;如果存在&#xff0c;就直接从内核缓存中直接返回&#xff0c;否则从磁盘中读取&#xff0c;然后缓存至操作系统的缓存中。 当应…

内存与IO,磁盘IO,网络IO

本节主要内容&#xff1a; 系统IO原理&#xff1a;Linux VFS FD pagecache [java] 1文件系统的io 2内存和io关系 3网络io 任何程序都有 0&#xff1a;标准输入 1&#xff1a;标准输出 2&#xff1a;报错输出 /proc/$$进入当前进程目录 $$表示当前bash的pid $BA…

关于 IO、存储、硬盘和文件系统

关于IO、存储、硬盘和文件系统 0.引入1.了解IO1.1.存储器IO1.2.设备IO 2.存储介质和存储类型2.1.内存2.2.硬盘2.3.固态硬盘&#xff08;SSD&#xff09;2.4.U盘 3.硬盘的工作原理3.1.磁头3.2.盘片3.3.电动机3.4.硬盘的读写操作 4.文件系统概述4.1.文件系统的类型4.2.文件系统的…

Linux查看与测试磁盘IO性能

1. 查看磁盘 IO 性能 1.1 top 命令 top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能&#xff0c;如果这个数值过大&#xff0c;很可能是磁盘 IO 太高了&#xff0c;当然也可能是其他原因&#xff0c;例如网络 IO 过高等。 top命令的其他参数代表的含义详见top命令详解…

Linux 查看磁盘IO

查看命令iostat&#xff0c;# 如果没有 iostat 命令&#xff0c;那么使用 yum install sysstat 进行安装 #间隔1秒&#xff0c;查询10次 iostat -x 1 10 由上图可知&#xff0c;vdb磁盘的 %util【IO】几乎都在100%&#xff0c;原因是频繁的读取数据造成的。 其他字段说明 De…

linux查看磁盘io

iostat -dxk 1 2 iostat iostat&#xff0c;对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出CPU使用情况。iostat也有一个弱点&#xff0c;就是它不能对某个进程进行深入分析&#xff0c;仅对系统的整体情况进行分析。 命令参数说明…

linux查看磁盘IO,网络IO 总结

linux查看磁盘IO&#xff0c;网络 IO可用的命令 1. top 监控整体服务器&#xff0c;cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网络等 2. dstat -d 查看当前磁盘每秒的读取&#xff0c;写入量&#xff0c;单位K 3. dstat -r 查看当前磁盘随机的读IOPS&#xff0c;…

linux查看磁盘io使用情况

六种方法 top命令、vmstat命令、iostat命令、iotop命令、pt-ioprofile命令、pidstat命令 一、 top命令 top - 11:41:22 up 51 min, 2 users, load average: 0.01, 0.04, 0.01 Tasks: 130 total, 1 running, 129 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.1%sy, 0.0%n…

从磁盘看 IO

计算机上的易失和非易失存储器 常见磁盘可以分为两类&#xff1a;机械磁盘和固态磁盘。 第一类&#xff0c;机械磁盘&#xff0c;也称为硬盘驱动器&#xff08;Hard Disk Driver&#xff09;&#xff0c;通常缩写为 HDD。机械磁 盘主要由盘片和读写磁头组成&#xff0c;数据就…

硬盘io性能分析

一、磁盘性能主要经常会看磁盘i/o使用率、iops、吞吐量、i/o响应时间等&#xff0c;常用命令sar、iostat、dstat &#xff1a; 1、常用命令&#xff1a;iostat -xm 1 &#xff0c;单位MB&#xff0c;表示每1秒刷新一次 ----------------- avg-cpu ---------------- %user&…

磁盘IO 基本常识

更多内容&#xff0c;前往 IT-BLOG 计算机硬件性能在过去十年间的发展普遍遵循摩尔定律&#xff0c;通用计算机的 CPU主频早已超过3GHz&#xff0c;内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速&#xff0c;但是在读写性能上并无明显提升&#xff0c;同…

【性能测试】系统常用监控- -磁盘IO

性能测试系统常用监控- -磁盘 文章目录 性能测试系统常用监控- -磁盘前言磁盘IO1.常用概念2.磁盘IO性能3.性能指标4.性能分析5.常用分析5. 1 iostat命令解析5.2 查看硬盘类型5.3 查看磁盘IO调度5.4 查看磁盘IO调度5.3 调优方法5.1 RAID 总结 前言 性能测试过程中&#xff0c;在…

磁盘IO

基本概念&#xff1a; 在数据库优化和存储规划过程中&#xff0c;总会提到IO的一些重要概念&#xff0c;在这里就详细记录一下&#xff0c;个人认为对这个概念的熟悉程度也决定了对数据库与存储优化的理解程度&#xff0c;以下这些概念并非权威文档&#xff0c;权威程度肯定就不…

磁盘IO及性能指标

一、磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出。操作系统从上层到底层,各个层次之间均存在 I/O。比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 I/O,这是广义上的 I/O。通常来讲,一个上层的 I/O 可能会产生针对磁盘的多个 I/O,也就是说,上层的 …

一提到mysql,总有人说磁盘IO,到底什么是磁盘IO?

为什么mysql的innodb存储引擎选择了B树&#xff0c;这个和磁盘的特性有着非常大的关系。 我们先来看下磁盘上的物理结构。 如果我们简化一下&#xff0c;可以这么看 再看几张模型图 一个磁盘由大小相同且同轴的圆形盘片组成&#xff0c;磁盘可以转动&#xff0c;各个磁盘必须同…

一寸照像素和厘米的关系及换算

一寸照的概念&#xff1a; 照片的一寸和二寸是指照片的边长度&#xff0c;而不是对角线。 这里的寸指的是英寸 厘米和英寸&#xff1a; 1 厘米&#xff1d;0.3937 英寸 1 英寸&#xff1d;2.54 厘米 一寸照的厘米概念&#xff1a; 一寸照规格是宽*高2.5cm*3.5cm &#xff0c;换…

CSS像素单位

一、px 整个屏幕的一个像素点。 二、em单位 1em&#xff1a;16px浏览器的默认值1em 基准值&#xff08;16px&#xff09;* number&#xff08;1&#xff09; 16px2em 基准值&#xff08;16px&#xff09;* number&#xff08;2&#xff09; 32px 当默认值改了&#xff0c…

python 找出矩阵中非零数

转载于:https://www.cnblogs.com/fuhang/p/9185840.html