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负载的主要来源及类型。

阅读剩余
THE END