- 作者:老汪软件技巧
- 发表时间: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 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题,全部免费