linux 磁盘 io(linux磁盘io使用率过高处理)
这篇文章给大家聊聊关于linux 磁盘 io,以及linux磁盘io使用率过高处理对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
Linux磁盘IO、网络IO、零拷贝详解
在计算机操作系统的领域,I/O(输入/输出)指的是数据从计算机系统外部到内部,或者从内部到外部的传输过程,通常可以分为磁盘I/O和网络I/O两类。
磁盘I/O模型和网络I/O模型的底层操作本质都是用户空间和内核空间之间的数据传输。在Linux操作系统中,由于安全性的考虑,用户进程无法直接访问内核空间的数据,因此数据传输需要经过从用户空间到内核空间,再到物理设备,最后返回用户空间的路径。
磁盘I/O的读操作过程中,当应用程序发起read()请求时,系统首先检查内核缓冲区是否已存有所需数据,若存在直接复制至用户空间;若不存在,则通过DMA方式从磁盘读取数据至缓冲区,再复制至用户空间。写操作则需先将数据从用户空间复制至内核缓冲区,具体步骤涉及三次拷贝:磁盘读取、用户空间至内核空间、内核空间至磁盘。
网络I/O的读写操作与磁盘I/O类似,读操作中数据可能来源于物理磁盘或socket,写操作中假设数据来源于磁盘,流程与磁盘I/O的写操作相似。网络I/O的延迟主要由服务器响应时间、带宽限制、网络延迟、路由跳转延迟和接收延迟等综合决定,通常大于磁盘I/O。
在磁盘I/O中,使用缓冲机制来提高效率和保护磁盘,但存在数据在应用程序地址空间和页缓存之间多次拷贝的操作,引入了开销。为解决这一问题,直接I/O(Direct I/O)方式被引入,数据直接在用户地址空间的缓冲区和磁盘之间传输,减少了不必要的拷贝。
mmap(内存映射)是另一种内存管理机制,它将页缓存地址空间映射到用户空间,允许用户进程直接对页缓存进行读写操作,实现了一种特殊的缓存I/O。
Linux中的五大网络I/O模型包括BIO(阻塞模式IO)、NIO(非阻塞模式IO)、I/O多路复用模型、信号驱动IO和异步IO(AIO)。这些模型分别采用不同的方式处理I/O请求,以适应不同的应用场景和性能需求。
总结而言,I/O操作是计算机系统中至关重要的环节,涉及数据在不同空间的高效传输。Linux操作系统通过各种机制优化I/O性能,满足不同应用的需要。
linux查看磁盘io的几种方法
怎样才能快速的定位到并发高是由于磁盘io开销大呢?可以通过三种方式:
第一种:用 top命令中的cpu信息观察
Top可以看到的cpu信息有:
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
具体的解释如下:
Tasks: 29 total进程总数
1 running正在运行的进程数
28 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
Cpu(s):
0.3% us用户空间占用CPU百分比
1.0% sy内核空间占用CPU百分比
0.0% ni用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id空闲CPU百分比
0.0% wa等待输入输出的CPU时间百分比
0.0% hi
0.0% si
0.0% wa的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。
第二种:用vmstat
vmstat命令报告关于线程、虚拟内存、磁盘、陷阱和 CPU活动的统计信息。由 vmstat命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
输入命令:
vmstat 2 5
如果发现等待的进程和处在非中断睡眠状态的进程数非常多,并且发送到块设备的块数和从块设备接收到的块数非常大,那就说明磁盘io比较多。
vmstat参数解释:
Procs
r:等待运行的进程数 b:处在非中断睡眠状态的进程数 w:被交换出去的可运行的进程数。此数由 linux计算得出,但 linux并不耗尽交换空间
Memory
swpd:虚拟内存使用情况,单位:KB
free:空闲的内存,单位KB
buff:被用来做为缓存的内存数,单位:KB
Swap
si:从磁盘交换到内存的交换页数量,单位:KB/秒
so:从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi:发送到块设备的块数,单位:块/秒
bo:从块设备接收到的块数,单位:块/秒
System
in:每秒的中断数,包括时钟中断
cs:每秒的环境(上下文)切换次数
CPU
按 CPU的总使用百分比来显示
us: CPU使用时间
sy: CPU系统使用时间
id:闲置时间
准测
更多vmstat使用信息
第二种:用iostat
安装:
Iostat是 sysstat工具集的一个工具,需要安装。
Centos的安装方式是:
yum install sysstat
Ubuntu的安装方式是:
aptitude install sysstat
使用:
iostat-dx显示磁盘扩展信息
root@fileapp:~# iostat-dx
r/s和 w/s分别是每秒的读操作和写操作,而rKB/s和wKB/s列以每秒千字节为单位显示了读和写的数据量
如果这两对数据值都很高的话说明磁盘io操作是很频繁。
一文了解使用linux查看磁盘io使用情况
五种方法:top、vmstat、iostat、iotop、pt-ioprofile,用于在Linux中查看磁盘IO使用情况。
一、top命令
使用示例:top- 11:41:22 up 51 min, 2 users, load average: 0.01, 0.04, 0.01
分析:查看wa(等待输入输出的CPU时间百分比),当wa值超过30%时,表示IO压力较高。
详细解释:
Tasks:进程总数
Cpu(s): CPU使用情况,包括us、sy、ni、id、wa、hi、si、st等。
wa值越高,说明磁盘IO请求越频繁。
二、vmstat命令
命令:vmstat 2 5(每两秒执行一次,执行5次)
详细参数:
Procs: r(等待运行的进程数)、b(非中断睡眠状态的进程数)
Memory: swpd(虚拟内存使用情况)、free(空闲内存)、buff(缓存内存数)
Swap: si(从磁盘交换到内存的交换页数量)、so(从内存交换到磁盘的交换页数量)
IO: bi(发送到块设备的块数)、bo(从块设备接收的块数)
System: in(每秒中断数)、cs(每秒环境切换次数)
CPU: us(CPU使用时间)、sy(系统使用时间)、id(闲置时间)
三、iostat使用
安装命令:yum install sysstat
使用示例:iostat-d-k 2(以KB为单位显示读写信息)
四、iotop命令
安装命令:yum install iotop
查看高IO消耗的线程,并按o只显示有磁盘IO活动的进程。
五、pt-ioprofile命令
安装步骤:安装依赖包、下载rpm包并安装
使用方法:pt-ioprofile--profile-pid=1236--cell=sizes(通过IO吞吐量进行定位)
pt-ioprofile通过附加strace进程进行IO分析,对定位问题更有帮助。通过--cell=sizes参数以B/s方式展示结果,明确IO负载的主要来源及类型。