对于业务开发来说,碰到磁盘IO利用率高的情况并不多,毕竟写磁盘的操作都集中到DB了,例如mysql/redis/hbase,一般由DBA来处理。但一些业务上的写文件、写日志,还是可能会碰到的。
步骤1:查看服务整体状态:top
从设备角度:
iostat 2 // 每2秒输出一次io使用情况
步骤2:找出占用IOPS大的进程
# -d表明显示磁盘IO,每1秒输出一次,输出20次
pidstat -d 1 20
步骤3:找出进程对应的线程
# -d表示磁盘IO,-t代表显示线程,-p代表进程ID,每1秒打印一次,共显示5次
pidstat -dt -p [pid] 1 5
步骤4:查看进程在做什么系统IO调用
# -p表示进程ID,-f表示同时追踪线程的系统调用(默认只追踪进程的)
strace -f -p [pid]
(这里也可以使用perf trace -t [tid] -o [output file name]
来记录系统调用,使用cat [filename]
来查看。
可以看出,有大量的open、write和close系统调用。write每次写入1048575字节。
步骤5:结合代码查看是否有问题
定位到具体的线程、以及线程在做什么之后,就可以结合代码来看了。
- 对于mysql,可以结合线程ID,结合information_schema表,来查看是哪个SQL语句导致的
- 对于java线程,可以结合jstack输出的Java线程ID和native线程ID,来找到对应的java线程ID
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix