Linux · 2 分钟阅读
Linux 系统问题诊断
系统出问题,先问三个问题:症状是什么?影响多大?最近改过什么?
故障分级
| 级别 | 例子 | 响应 |
|---|---|---|
| P0 | 系统宕机 / 数据丢失 | 立刻 |
| P1 | 核心服务不可用 | 30 分钟内 |
| P2 | 性能下降 / 警告 | 工作时间内 |
| P3 | 非核心异常 | 排期处理 |
工具速查
uptime
ps aux
top / htop
free -h
df -h
iostat -dx 1
ss -tunlp
dmesg | tail
journalctl -u <service> -n 200
tail -f /var/log/messages
CPU 异常
top -c # 看具体进程
pidstat -u 1 -p <pid> # 单进程 CPU 采样
perf top -p <pid> # CPU 热点
strace -p <pid> # 系统调用
内存异常
free -h
ps aux --sort=-%mem | head
cat /proc/<pid>/status # 详细内存
slabtop # 内核 slab
valgrind --leak-check=full <cmd> # 内存泄漏
磁盘异常
df -h
du -sh /*
ls -la /var/log # 谁的日志炸了
iotop
iostat -dx 1
fsck /dev/sda1 # 文件系统修复(umount 后)
网络异常
ss -tunlp
netstat -tunlp
mtr -rw <ip> # 丢包 + 延迟
tcpdump -i eth0 port 80 -nn # 抓包
服务无响应
systemctl status <service>
journalctl -u <service> -n 200 -f
# 看进程在不在、监听端口、CPU 是否打满
应急套路
# 进程没响应
kill -TERM <pid>
kill -KILL <pid> # 实在不行再上 -9
# 磁盘满
journalctl --vacuum-time=2d
find /var/log -name "*.gz" -mtime +30 -delete
apt clean
yum clean all
# CPU 飙高
top -c 找到 PID → pidstat / perf / strace
# 内存飙高
free -h 看实际可用 → ps 找吃内存的进程
# 服务起不来
systemctl status <service>
journalctl -u <service> -n 200 -f
# 通常配置 / 端口 / 权限三类问题
长期防患
- 监控 + 告警(Prometheus / Zabbix / Datadog)
- 容量规划:磁盘 80% 告警,CPU 70% 持续 5 分钟告警
- 应急 Runbook:核心故障的处理流程文档化
- 定期演练:故障切换、备份恢复
- 变更评审:每次生产变更都有记录