ubuntu磁盘高IO排除
能ping通但系统卡死,说明网络服务正常,但系统资源(极大概率是磁盘I/O)已耗尽,无法响应其他请求。这就像电话能打通但没人接听——CPU在苦苦等待磁盘响应。按以下步骤排查(需通过另一台机器SSH登录,或耐心在本机操作):
1. 快速诊断:是磁盘I/O问题吗?
先确认问题是否出在磁盘。用iostat和vmstat看一眼全局状态。
# 安装工具(如果没装)
sudo apt update && sudo apt install sysstat -y
# 监控磁盘状态,每1秒刷新一次
iostat -x 1重点关注:
%util:如果持续接近100%,说明磁盘已完全饱和,是卡死的直接原因。await:如果高于几十毫秒甚至上百毫秒,说明磁盘响应极慢,进程在排队等待。
同时开个终端用vmstat 1看wa(iowait)列,如果这个值很高(如超过20%),也说明CPU在等I/O完成。
2. 定位元凶:揪出占满磁盘的进程
确认I/O瓶颈后,马上找出是哪个进程在狂写磁盘。
sudo iotop -oPa-o:只显示正在读写的进程,过滤无关信息。-P:显示进程ID。-a:显示累计读写量,而不是瞬时速度,更容易定位“总吞吐量”大的进程。
看DISK READ和DISK WRITE列,数值最高的就是罪魁祸首。常见可疑对象:
apt-check/unattended-upgrades:系统自动更新,会在后台下载和扫描包,可能引发高I/O。jbd2:文件系统日志进程,本身不是元凶,它忙说明有大量小文件写入(如日志风暴),得继续用iotop找实际写数据的进程。- 数据库或日志进程:如mysqld、rsyslogd、journald。
3. 紧急处理与根本原因
先"止血"(紧急恢复):
如果确认是用户进程(如备份脚本)或非关键服务导致,可考虑临时结束它,让系统恢复响应。
sudo kill -9 <PID> # 确认进程后谨慎操作根因可能及后续:
- 内存不足(Swap颠簸):
free -h看Swap使用,若used很高,说明物理内存耗尽,系统在用慢速硬盘当内存,导致卡死。建议增加物理内存或调整vm.swappiness=10减少Swap使用。 - 日志积压:
journald日志暴涨。可用journalctl --vacuum-size=500M压缩,并检查/var/log分区是否满了。 - 硬件故障:用
sudo smartctl -a /dev/sda检查硬盘健康,若Reallocated_Sector_Ct等字段非零,说明硬盘可能有坏道,需备份数据。
简单说就是:iostat看磁盘忙不忙 -> iotop找谁在忙 -> free看内存是否拖累磁盘。如果I/O wait持续高位且%util接近100%,问题就在这里。
最新评论 (0/10)