导语:Linux 故障排查最怕“凭感觉操作”,更可靠的方式是先缩小范围,再用日志、资源、网络、磁盘和服务状态逐层验证。下面整理一套适合日常服务器、开发机和运维值班场景的排查思路,尽量做到可执行、可复用、少走弯路。🔧
一、先判断故障类型:别急着重启
遇到系统卡顿、服务异常、磁盘写满、无法登录或网络不通时,第一步不是立刻重启,而是确认“影响范围”和“最近变化”。可以先问自己三个问题:是单个服务异常,还是整台机器异常?是刚发布、刚改配置后出现,还是突然发生?是所有用户受影响,还是部分用户受影响?这样能避免把简单问题扩大化。
- 看现象:页面打不开、SSH 连不上、接口超时、磁盘报警、CPU 飙高等,先记录具体报错。
- 看范围:只影响某个端口、某个进程,还是整机负载异常。
- 看时间:结合变更记录、定时任务、发布日志,定位问题开始的时间点。
二、日志是第一现场:先看系统,再看服务
现代 Linux 发行版常使用 systemd,journalctl 可用于查看 systemd journal 中的日志,并支持按服务、时间、优先级等条件过滤,适合排查服务启动失败、崩溃和权限问题 journalctl 手册。常用命令包括:journalctl -xe 查看近期错误上下文,journalctl -u nginx.service -b 查看本次启动后某服务日志,journalctl --since "10 min ago" 聚焦最近十分钟。
如果怀疑是硬件、驱动、文件系统或内核层面问题,可以查看 dmesg。它展示内核环形缓冲区信息,常用于排查磁盘 I/O 错误、网卡驱动异常、OOM 相关线索和设备识别失败。建议配合 dmesg -T、dmesg | grep -i error、dmesg | grep -i oom 使用,重点关注 error、fail、timeout、reset、denied 等关键词。🧩
三、系统变慢:从负载、CPU、内存查起
系统“卡”不一定等于 CPU 满,也可能是磁盘 I/O 等待、内存不足或进程堆积。可以先用 uptime 查看 load average。/proc/loadavg 的前三个字段分别表示 1、5、15 分钟平均负载,含义与 uptime 等工具显示的负载一致 proc_loadavg 手册。如果负载持续高于 CPU 核心数,需要继续分析忙在哪里。
- CPU 排查:top 或 htop 查看占用最高的进程,ps aux --sort=-%cpu | head 快速列出高 CPU 进程。
- 内存排查:free -h 查看可用内存和 swap,ps aux --sort=-%mem | head 找出大内存进程。
- I/O 排查:iostat、iotop、vmstat 可辅助判断是否存在磁盘等待;若没有安装工具,可先看 top 中 wa 指标。
- 进程排查:pidstat、strace、lsof 适合进一步定位进程是否卡在文件、网络或系统调用上。
四、服务启动失败:按“状态、配置、端口、权限”排查
服务异常时,建议按固定顺序检查:systemctl status 服务名 查看状态;journalctl -u 服务名 -xe 查看失败原因;再检查配置文件语法、端口占用、文件权限和依赖服务。很多服务起不来,并不是程序坏了,而是配置拼写错误、证书路径错误、端口被占用或运行用户没有目录读写权限。
端口问题可以用 ss -lntp 查看监听情况,用 ss -antp 观察连接状态。如果端口被占用,先确认占用进程是不是旧实例,不要直接 kill -9。更稳妥的做法是先查看进程启动参数、父进程和日志,再决定是停止旧服务、修改端口,还是修复服务管理脚本。
五、磁盘空间异常:不只看容量,也要看 inode
df 用于报告文件系统空间使用情况,df -h 可以用更易读的单位展示空间,df -i 则用于查看 inode 使用情况 GNU df 文档。有时磁盘显示还有空间,但服务仍然无法写入,原因可能是 inode 被大量小文件耗尽。
- 查整体:df -h 查看哪个挂载点满了,df -i 查看 inode 是否耗尽。
- 查目录:du -sh /* 2>/dev/null 从根目录开始定位大目录,再逐层深入。
- 查日志:优先检查 /var/log、应用日志目录、容器日志目录和临时文件目录。
- 安全清理:不要直接删除未知文件,先确认是否正在被进程占用,可用 lsof | grep deleted 查找已删除但仍占空间的文件。
六、网络不通:分层验证更高效
网络故障建议从本机到远端逐层验证。先用 ip addr 确认网卡和地址,再用 ip route 检查默认路由,用 ping 测连通性,用 curl -v 或 nc -vz 测端口,用 dig 或 nslookup 验证 DNS。若只有域名不通而 IP 可通,重点查 DNS;若 IP 也不通,继续查路由、防火墙、安全组或上游网络。
防火墙和访问控制也很常见。iptables、nftables、firewalld、云厂商安全组、容器网络策略都可能影响连接。排查时不要只看 Linux 本机规则,还要确认负载均衡、反向代理、网关和目标服务监听地址。例如服务只监听 127.0.0.1,外部自然无法访问。
七、实用排查习惯:让问题可复盘
一次好的排障,不只是把服务恢复,还要留下能复盘的线索:时间、现象、命令输出、根因、修复动作和预防措施。
建议执行高风险操作前先备份配置,例如 cp nginx.conf nginx.conf.bak.$(date +%F-%H%M)。修改服务配置后,优先使用测试命令验证语法,再 reload 或 restart。对生产环境而言,重启不是万能解法,它可能暂时掩盖问题,也可能清空关键现场信息。
总结
Linux 常见故障排查可以概括为一句话:先定范围,再看日志,接着查资源、服务、磁盘和网络,最后复盘根因。熟练掌握 journalctl、dmesg、top、free、df、du、ss、ip、curl 等基础工具,配合清晰的排查顺序,就能把“系统异常”拆解成一个个可验证的小问题。排障不追求命令炫技,关键是稳、准、可回滚。✅