服务器出问题先别慌,按下面几个维度逐步排查。
系统负载高
uptime # 负载均值
top # 实时进程,按 CPU/内存排序
htop # 更友好的 top
ps aux --sort=-%cpu | head # CPU 占用前几名
ps aux --sort=-%mem | head # 内存占用前几名
load average 的三个数字接近核数即可,超过核数数倍说明过载。
内存不足 / OOM
free -h # 内存概况
dmesg | grep -i oom # 查看被杀进程
可疑进程排查后,用 kill <pid> 处理,或优化应用内存。
磁盘空间
df -h # 分区使用率
du -sh /var/* | sort -h # 找大目录
du -h --max-depth=2 /var/log | sort -h | tail
journalctl --disk-usage # 系统日志占用
日志清理:
sudo journalctl --vacuum-size=200M
端口占用
ss -tlnp # 监听端口及对应进程
ss -tlnp | grep :80
lsof -i :8080 # 谁占了 8080
网络问题
ping -c 4 example.com # 连通性
curl -I http://localhost # 本地服务响应
traceroute example.com # 路由追踪
ss -s # 连接统计
域名解析排查:
dig example.com +short
nslookup example.com
服务无法启动
sudo systemctl status myservice # 状态与最近日志
sudo journalctl -u myservice -n 50 # 最近 50 行日志
systemctl list-unit-files | grep myservice # 是否开机自启
进程异常
pgrep -a nginx # 按名字找进程
kill -9 <pid> # 强制杀(最后手段)
ps -ef --forest # 进程树,找孤儿进程
一个通用的排查顺序
- 先看系统资源:
uptime、free -h、df -h - 再看服务状态:
systemctl status、日志 - 最后查网络:端口监听、域名解析、连通性
按顺序来,大部分问题十分钟内能定位。