• 作者:老汪软件技巧
  • 发表时间:2024-08-24 07:03
  • 浏览量:

前言

在日常运维或开发中,Linux系统硬盘读写变慢是一个常见但又头疼的问题。

面对这种情况

如何才能快速的排查定位问题?

今天小北就分享一个固定的排查套路,四步教你快速定位问题。

第一步:查看硬盘是否繁忙

当系统的硬盘读写速度变慢,第一步就是检查硬盘是否繁忙。这里推荐使用 iostat 工具。执行以下命令:

iostat -x 1 5

输出中关注 await 和 %util 这两个字段:

比如同时读写多个大文件,数据库查询等。

如果确实如此,我们需要继续分析哪些进程导致了这种现象。

需要注意的是,使用iostat命令,需要使用yum install sysstat安装iostat工具

第二步:找出占用硬盘最高的进程

确认硬盘存在繁忙后,接下来,我们需要找出占用硬盘I/O最高的进程,这时候我们就需要用到“iotop”工具了。

运行以下命令:

iotop -o

这个命令会显示当前占用I/O最高的进程。

关注那些 I/O 值比较大的进程,尤其是 READ 和 WRITE 列。

如果有进程占用I/O过高,比如数据库进程或者某些异常的脚本进程,这就是问题的直接来源。

此时,我们已经大致锁定了硬盘读写慢的原因来自某些进程过度使用I/O,但还需要进一步分析这些进程具体在读写哪些文件。

需要注意的是,如果你输入iostat -o提示“-bash: iotop: command not found”,你需要输入yum install -y iotop安装iotop工具

如下图

硬盘慢于多少毫秒修复__慢扫硬盘

如果你近期准备面试跳槽,建议在CXYKK.COM:程序员快看编程资料站在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题,免费使用

第三步:查看进程读写的文件

上一步我们已经锁定占用I/O最高的进程了,如果想要要进一步分析进程在读写哪些文件,就需要使用 lsof 命令配合 strace 工具来排查

首先,记录下第2步占用IO最高的进程 使用 lsof 来查看指定进程打开的文件:

lsof -p 18841

通过这个命令,可以看到该进程正在操作的文件。如果发现某些文件特别大,或者频繁被读写,这可能是性能瓶颈所在。

进一步地,你还可以用 strace 追踪进程的系统调用:

  strace -p 18841 -e trace=open,read,write

这个命令会输出进程的读写操作,可以清晰地看到进程读写了哪些文件。

如果发现进程反复读写某些大文件,比如日志文件、数据库文件等,这可能就是硬盘性能下降的主要原因。

第四步:检查硬盘是否存在坏道

如果经过前三步排查,发现进程I/O占用并没有明显异常,但硬盘读写依然缓慢,接下来需要考虑硬盘本身的健康状况。硬盘坏道是导致读写速度慢的重要原因之一。

使用 smartctl 工具来检查硬盘健康状态:

smartctl -a /dev/sda

输出结果中,关注 Reallocated_Sector_Ct、Current_Pending_Sector 和 Offline_Uncorrectable 等字段。

如果这些字段的值异常(如非零),说明硬盘可能存在坏道,这将极大影响读写性能。

总结

通过上述四个步骤的分析,基本可以覆盖硬盘读写慢的主要原因。

总结来说,硬盘性能问题通常由高负载的I/O操作、进程异常读写、文件系统问题或硬盘本身的硬件故障引发。在实际排查时,我们需要结合工具的输出,逐步排除可能性,最终锁定问题根源并采取相应措施。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的,

如果你近期准备面试跳槽,建议在CXYKK.COM:程序员快看编程资料站在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题,全部免费