在 Linux 服务器运维中,“卡顿”是最常见但也最容易误判的问题之一。它可能来自 CPU、内存、磁盘、网络,也可能来自进程异常或系统配置问题。
本文提供一套从现象 → 定位 → 解决的完整排查流程,适用于生产环境服务器(VPS / 云主机 / 物理机)。
一、先判断:到底“卡”在哪里?
服务器卡顿一般分为四类:
- CPU 过高(计算压力)
- 内存不足(频繁 swap)
- 磁盘 IO 瓶颈(最常见)
- 网络异常(延迟/丢包)
二、快速体检(1分钟定位问题)
1️⃣ 查看系统整体负载
uptime
输出示例:
load average: 5.32, 4.88, 3.90
👉 判断标准:
- 小于 CPU 核心数:正常
- 大于 CPU 核心数:可能卡顿
2️⃣ 查看 CPU 占用
top
或:
htop
重点看:
- %CPU
- load average
- top 进程
3️⃣ 查看内存情况
free -h
重点:
- available 是否过低
- swap 是否在使用
4️⃣ 查看磁盘 IO
iostat -x 1
如果没有:
sudo apt install sysstat -y
重点:
- %util 接近 100% → 磁盘瓶颈
三、CPU导致卡顿(最常见)
1️⃣ 查找高CPU进程
top -o %CPU
或:
ps aux --sort=-%cpu | head
2️⃣ 常见原因
- 死循环程序
- Web服务请求暴增
- Java / Node 内存泄漏
- 容器异常(Docker)
3️⃣ 解决方法
杀掉异常进程
kill -9 PID
限制CPU(Docker)
--cpus="1.0"
四、内存导致卡顿(swap杀手)
1️⃣ 查看内存
free -h
2️⃣ 判断是否 swap
swapon --show
3️⃣ swap导致卡顿特征
- CPU不高但系统卡
- load average 很高
- IO等待时间长
4️⃣ 解决方法
清理缓存
sync; echo 3 > /proc/sys/vm/drop_caches
增加 swap
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
五、磁盘 IO 卡顿(最严重)
1️⃣ 查看 IO 状态
iotop
2️⃣ 查看磁盘使用率
df -h
3️⃣ IO瓶颈特征
- load average 高
- CPU idle 高但系统卡
- iowait 很高
4️⃣ 常见原因
- 日志疯狂写入
- 数据库查询慢
- Docker日志爆炸
- 磁盘快满
5️⃣ 解决方法
清理日志
sudo journalctl --vacuum-time=7d
限制 Docker 日志
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
六、网络导致卡顿
1️⃣ 测试延迟
ping 8.8.8.8
2️⃣ 查看连接数
ss -ant | wc -l
3️⃣ 常见原因
- DDOS攻击
- DNS异常(DNS)
- 带宽打满
4️⃣ 解决方法
sudo ufw limit ssh
七、系统级问题
1️⃣ 文件句柄耗尽
ulimit -n
2️⃣ 查看内核日志
dmesg | tail
3️⃣ zombie进程
ps aux | grep Z
八、Docker导致卡顿(重点)
Docker 常见问题:
1️⃣ 容器CPU打满
docker stats
2️⃣ 容器日志爆炸
/var/lib/docker/containers/
3️⃣ 解决方案
限制资源:
deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
九、快速排查流程(建议收藏)
遇到卡顿按这个顺序:
Step 1:看负载
uptime
Step 2:看CPU
top
Step 3:看内存
free -h
Step 4:看磁盘
iostat -x 1
Step 5:看网络
ss -ant
十、生产优化建议
✔ 1. 定期清理日志
✔ 2. 限制 Docker 资源
✔ 3. 使用监控工具
推荐:
- Prometheus
- Grafana
✔ 4. 开启 swap(低内存机器)
十一、总结
在 Linux 上,服务器卡顿本质是资源瓶颈:
- CPU过载
- 内存不足
- IO瓶颈
- 网络拥塞
而 Docker 和 DNS 也常常是隐藏原因。