R / Richie全部文章 ↑

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:核心故障的处理流程文档化
  • 定期演练:故障切换、备份恢复
  • 变更评审:每次生产变更都有记录

参考