0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

磁盘I/O瓶颈的解决方法

CHANBAEK 来源:myfreax 作者:myfreax 2023-01-04 17:28 次阅读

如果您的Linux服务器出现故障,您的第一步通常是在终端中使用top命令来检查平均负载。

但是,有时会top命令显示非常高的平均负载,即使CPUus和CPU的id的度数比较低也是如此。

如果CPU单核的负载超过1,但CPU显示大约70%空闲。这种情况的常见原因之一是磁盘 I/O瓶颈。

什么是I/O等待瓶颈

存储I/O是物理磁盘或其他存储,例如磁盘或SSD。输入/输出(或写入/读取)的操作。

如果CPU需要在磁盘上等待读取或写入数据,则涉及磁盘I/O的请求会显着变慢。I/O Wait是CPU必须等待存储设备的时间百分比。

在Linux服务器可以使用一些终端命令行工具,例如top、atop和iotop来确认磁盘I/O是否正在降低应用程序性能。

top 命令平均负载与等待时间wa

当您运行top命令,您将首先浏览右上角检查平均负载。在这种情况下,它非常高。

接下来,我们很可能会浏览顶部附近的CPU和内存,然后是%CPU%MEM列,以了解哪些进程使用的资源最多。

top,您还需要查看wa,它几乎一直是0.0%。值始终高于1%可能表示您的存储设备速度太慢,无法跟上IO的请求。

值得注意的是,top命令顶部%Cpu(s)行的wa是多个核心wa的平均值,可以按1键来展开视图,查看每个CPU核心wa值。

完成此操作后,我们看到某些CPU内核的%wa时间高达 60%。所以我们知道有一个主要的瓶颈,接下来我们来确认一下这个磁盘瓶颈。

atop 命令监控DSK(存储)I/O 统计信息

接下来,使用atop,我们看到存储设备DSK行的busy的值在90%到100%。这是一个严重的瓶颈。在Web服务导致结果就是HTTP请求被阻塞,直到磁盘I/O可以赶上。

atop,按d键盘查看正在使用磁盘I/O的进程。这里我们看到MySQL、Nginx、PHP-FPM,这些都是web服务核心进程。

要降低web服务磁盘IO,可以考虑将Nginx或Apache、MySQL和PHP-FPM的访问日志和错误日志不要过于频繁地写入磁盘。

并且避免将缓存(例如Nginx 缓存)存储在磁盘。高并发流量环境。除了LEMP服务之外。

还要注意flush-8:0(一个PHP缓存问题)和jbd2/sda5-8(跟踪到访问/内核日志)及其进程。

此时,如果可以,你应该在Linux服务器上执行一个快速SSD基准测试,以了解磁盘IO的速度。

运行命令dd if=/dev/zero of=diskbench bs=1M count=1024 conv=fdatasync

dd if=/dev/zero of=diskbench bs=1M count=1024 conv=fdatasync
1073741824 bytes (1.1 GB) copied, 46.0156 s, 23.3 MB/s

尽管可以减少读/写,但磁盘I/O非常慢。如果MySQL的my.cnf的max_connections设置太高。

就会导致MySQL连接和查询堆积并增长到超出可用服务器RAM的范围。它就会发展到Linux内核OOM杀死MySQL的地步。

通常MySQL最大的连接数等于最大分配内存除以每个线程缓冲区的大小。

iotop 命令实时监控磁盘读/写

iotop命令监控Linux内核输出的I/O使用信息。它显示系统进程或线程的当前I/O使用情况,运行命令iotop -oPa

iotop -oPa

iotop命令-o选项仅显示正在执行I/O的进程或线程,而不是显示所有进程或线程。这可以通过按o键 动态切换。

-P选项仅显示进程。通常iotop命令显示所有线程。-a选项显示累积的I/O而不是带宽。

在这种模式下,iotop命令显示自iotop命令启动以来完成的I/O进程的数量。

查看DISK WRITE列,这些数字不是很大。合理平均速度的存储设备不会忙于一些内核日志记录和磁盘缓存。

但是在低于25 MB/s的写入速度时,磁盘IO就会被Nginx缓存、内核日志、访问日志等操作使用最大化。要解决这类问题,是用性能更好的存储设备替换现有的设备。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11138

    浏览量

    208154
  • 服务器
    +关注

    关注

    12

    文章

    8751

    浏览量

    84731
  • 磁盘
    +关注

    关注

    1

    文章

    355

    浏览量

    25114
收藏 人收藏

    评论

    相关推荐

    什么是磁盘I/O驱动程序吗?它的用途是什么?

    我正在阅读有关 FAT 文件系统组件的 Espressif 文档。在这份文档中,写到 FatFS 已经扩展了 API 函数,可以在运行时注册磁盘 I/O 驱动程序。你能解释一下什么是磁盘
    发表于 04-13 08:39

    Linux系统中网络I/O性能改进方法的研究

    选择并设计高效的网络I/O模型是改善服务器性能的关键。该文通过对Linux系统中几种网络I/O模型的分析和研究,提出3种改善网络I/
    发表于 04-09 09:41 28次下载

    一种高效的磁盘队列I/O机制

    分析了传统磁盘队列的存储管理开销和读写性能,针对磁盘队列I/O已成为影响消息服务器性能的首要瓶颈,提出了一种高效
    发表于 05-14 19:51 32次下载

    播出服务器磁盘I/O与缓存性能分析

    播出服务器磁盘I/O与缓存性能分析:针对电视台专业播出服务器在播出质量和播出性能上的高要求,提出了(s,S)策略下读数据缓存和复用缓存与节目数量、节目数据速率、磁盘性能
    发表于 01-16 15:09 22次下载

    I/O扩展(8255)模块

    为用户在中提供一个I/O 扩展的方法,在设计过程遇到I/O不够用时可以用此种方案。
    发表于 07-04 17:12 0次下载

    Java I/O 的相关方法分析

    I/O,即 Input/Output(输入/输出) 的简称。就 I/O 而言,概念上有 5 种模型:blocking I/
    发表于 09-27 13:18 0次下载
    Java <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的相关<b class='flag-5'>方法</b>分析

    通过对blktrace的输出结果进行分析读、写操作的磁盘块进行I/O频次统计

    通过对blktrace的输出结果进行分析,我们可以对特定时间段内发生的读、写操作的磁盘块进行I/O频次统计。结合通过将磁盘I/
    的头像 发表于 04-03 09:48 9410次阅读
    通过对blktrace的输出结果进行分析读、写操作的<b class='flag-5'>磁盘</b>块进行<b class='flag-5'>I</b>/<b class='flag-5'>O</b>频次统计

    关于I/O口位操作的方法介绍(2)

    I/O口位操作的方法
    的头像 发表于 07-10 11:45 3783次阅读
    关于<b class='flag-5'>I</b>/<b class='flag-5'>O</b>口位操作的<b class='flag-5'>方法</b>介绍(2)

    关于I/O口位操作的方法介绍(1)

    I/O口位操作的方法
    的头像 发表于 07-02 11:17 3878次阅读
    关于<b class='flag-5'>I</b>/<b class='flag-5'>O</b>口位操作的<b class='flag-5'>方法</b>介绍(1)

    如何更改 Linux 的 I/O 调度器

    Linux 的 I/O 调度器是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度器。Linux I
    发表于 05-15 15:54 804次阅读
    如何更改 Linux 的 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 调度器

    如何用GPUDirect存储器如何缓解CPU I / O瓶颈

    的数据 I / O 增长成为处理时间的瓶颈。当人工智能和数据科学继续重新定义可能的艺术时,启用直接路径可以减少甚至完全缓解这个瓶颈
    的头像 发表于 04-10 10:59 4043次阅读
    如何用GPUDirect存储器如何缓解CPU <b class='flag-5'>I</b> / <b class='flag-5'>O</b><b class='flag-5'>瓶颈</b>

    Linux磁盘I/O的性能指标和查看性能工具

    在我之前的文章:《探讨 Linux 的磁盘 I/O》中,我谈到了 Linux 磁盘 I/O 的工
    的头像 发表于 05-14 15:21 2492次阅读

    AN036 基于EEPROM通信的I2C总线锁死解决方法

    AN036 基于EEPROM通信的I2C总线锁死解决方法
    发表于 02-23 19:09 0次下载
    AN036 基于EEPROM通信的<b class='flag-5'>I</b>2C总线锁死<b class='flag-5'>解决方法</b>

    单片机I/O驱动与隔离常见设计方法

    单片机I/O驱动与隔离常见设计方法
    的头像 发表于 10-25 17:36 2096次阅读
    单片机<b class='flag-5'>I</b>/<b class='flag-5'>O</b>驱动与隔离常见设计<b class='flag-5'>方法</b>

    磁盘I/O是怎么工作的

    同前面讲述的CPU、内存一样,文件系统和磁盘I/O,也是Linux操作系统最核心的功能。 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘
    的头像 发表于 11-13 11:20 895次阅读
    <b class='flag-5'>磁盘</b><b class='flag-5'>I</b>/<b class='flag-5'>O</b>是怎么工作的