linux如何快速定位 IO高进程
1. 快速定位 IO 高的进程
Linux 中排查磁盘 IO高
1 | 系统IO是否繁忙(wait) |
2. 查看系统整体 IO
2.1 iostat
安装:
1 | # CentOS/RHEL |
查看:
1 | iostat -x 1 |
重点关注:
1 | %util 磁盘利用率 |
例如:
1 | Device r/s w/s await %util |
说明:
1 | sda 已接近打满 |
3. 查看哪个进程 IO 最高
3.1 iotop(最常用)
安装:
1 | yum install -y iotop |
执行:
1 | iotop |
只看有IO的进程:
1 | iotop -o |
按累计排序:
1 | iotop -ao |
输出示例:
1 | PID USER DISK READ DISK WRITE COMMAND |
说明:
1 | mysqld正在大量写盘 |
3.2 pidstat
比 iotop 更适合服务器监控。
1 | pidstat -d 1 |
输出:
1 | PID kB_rd/s kB_wr/s Command |
持续观察:
1 | pidstat -d 1 10 |
每秒统计一次,共10次。
4. 查看进程到底在访问哪个文件
4.1 lsof
查看进程打开文件:
1 | lsof -p 1234 |
例如:
1 | mysqld 1234 mysql REG /data/mysql/ibdata1 |
4.2 lsof + grep deleted
经常用于排查磁盘空间不释放:
1 | lsof | grep deleted |
例如:
1 | java 1234 logfile.log (deleted) |
说明:
1 | 日志文件被删除 |
5. 查看块设备层面的 IO 来源
现代 Linux 推荐:
1 | pidstat -d |
或者:
1 | sar -d 1 |
如果需要更底层分析:
1 | blktrace |
1 | blktrace -d /dev/sda |
配合:
1 | blkparse |
查看具体IO请求来源。
6. eBPF方式(生产环境推荐)
如果内核较新(4.x+)安装 BCC:
1 | yum install bcc-tools |
查看IO热点进程
1 | biotop |
输出:
1 | PID COMM DISK_READ DISK_WRITE |
查看IO延迟
1 | biolatency |
查看文件热点
1 | fileslower |
查看慢文件IO:
1 | fileslower 10 |
显示超过10ms的文件操作。
7. 最实用排查命令
日常线上排查,通常这几个就够了:
1 | # 查看IO等待 |