Linux系统卡顿排查
约 869 字大约 3 分钟
2026-08-29
服务器"卡"通常来自四个方向:CPU、内存、磁盘 IO、带宽。本文按症状给出定位与处理方法。基础命令的用法见Linux资源查看基础命令。
先定位方向
top对照 top 输出快速判断:
| 现象 | 大概率方向 |
|---|---|
%Cpu(s) 的 us/sy 接近 100% | CPU 瓶颈,见下文 CPU 高 |
wa(iowait)很高 | 磁盘 IO 瓶颈,见下文磁盘 IO 高 |
load average 远超核心数且 KiB Swap 在涨 | 内存不足,见下文内存高 |
| CPU/内存都空闲但仍"卡" | 带宽或网络问题,见文末 |
CPU 高
定位进程:
top按P排序,记录占用最高的进程名与 PID。判断进程是否属于自己:
- 是业务进程(如 nginx、php-fpm、java):多为访问量上涨或代码低效,结合业务日志分析;短期可重启服务,长期需优化或升级配置。
- 名字随机、CPU 持续接近 100% 且来历不明:警惕挖矿木马,检查定时任务(
crontab -l、/etc/cron*)与开机启动项,必要时杀进程并排查入侵途径。
单核与多核:4 核实例一个进程占 100% 只吃满 1 核,属于正常现象;整体卡顿看总负载是否超过核心数。
内存高
free -havailable还很充足:used高但大头在buff/cache,这是正常缓存,不是问题。available极低、Swap 在持续增长:内存真的不够。
# 找出内存占用前几名的进程
ps aux --sort=-%mem | head
# 确认是否发生过 OOM(内核强制杀进程,表现为服务莫名消失)
sudo dmesg | grep -i 'out of memory'处理:优化内存大户(如数据库缓存参数)、重启泄漏的进程,或升级实例配置;临时兜底可配置 Swap,参见配置Swap与虚拟内存。
磁盘 IO 高
# 安装:apt install sysstat / dnf install sysstat
iostat -x 1 5关注两列:%util 长期接近 100% 说明磁盘打满,await 单次读写等待毫秒数明显增大说明响应变慢。
# 定位是哪个进程在大量读写(需安装 iotop)
sudo iotop -o常见原因与处理:日志狂刷(调低日志级别/轮转)、数据库大查询(优化 SQL)、频繁小文件写入(合并写入)。若业务量确实增长,升级为更高性能的磁盘规格。
inode 耗尽(能写入的文件数满了)
磁盘没满但创建文件报 No space left on device,多为 inode 耗尽(海量小文件):
df -i # IUse% 接近 100% 即耗尽
sudo du --inodes -s /var/* 2>/dev/null | sort -rn | head # 逐级找小文件大户常见大户:会话文件、邮件队列、日志碎片,清理后恢复。详细的空间类问题见磁盘空间异常排查。
CPU / 内存都空闲但仍卡
- 带宽跑满:
iftop查看实时流量(安装与用法见Linux资源查看基础命令),确认是否被刷或带宽规格不足(参见带宽计费模式的限速规则)。 - 跨境/跨网延迟:用双向 MTR 测试定位链路质量。
- 单个服务慢而系统不慢:问题在应用本身(数据库慢查询、外部接口超时),查看应用日志。
仍无法定位?
按工单要求附上:top(含 load)、free -h、df -h、卡顿时段的业务日志截图,提交工单。
