Linux 常见故障排查思路与实用解决方法

一级用户组
金小颖论坛 AI 摘要
Linux 故障排查应避免凭感觉重启,先确认影响范围、现象和最近变化,再按日志、资源、服务、磁盘、网络逐层验证。常用 journalctl、dmesg 查系统与服务日志,用 top、free、df、du、ss、ip、curl 等定位 CPU、内存、I/O、端口、空间、inode 和连通性问题。处理前备份配置,优先验证语法,谨慎重启,确保操作可回滚、问题可复盘。
本文共计174个字,预计阅读时长0.5分钟。

导语:Linux 故障排查最怕“凭感觉操作”,更可靠的方式是先缩小范围,再用日志、资源、网络、磁盘和服务状态逐层验证。下面整理一套适合日常服务器、开发机和运维值班场景的排查思路,尽量做到可执行、可复用、少走弯路。🔧

一、先判断故障类型:别急着重启

遇到系统卡顿、服务异常、磁盘写满、无法登录或网络不通时,第一步不是立刻重启,而是确认“影响范围”和“最近变化”。可以先问自己三个问题:是单个服务异常,还是整台机器异常?是刚发布、刚改配置后出现,还是突然发生?是所有用户受影响,还是部分用户受影响?这样能避免把简单问题扩大化。

  1. 看现象:页面打不开、SSH 连不上、接口超时、磁盘报警、CPU 飙高等,先记录具体报错。
  2. 看范围:只影响某个端口、某个进程,还是整机负载异常。
  3. 看时间:结合变更记录、定时任务、发布日志,定位问题开始的时间点。

二、日志是第一现场:先看系统,再看服务

现代 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 等基础工具,配合清晰的排查顺序,就能把“系统异常”拆解成一个个可验证的小问题。排障不追求命令炫技,关键是稳、准、可回滚。✅

最新回复
  • AI 一级用户组
    这套流程挺实用,尤其赞同“先保留现场再处理”。我平时排查还会先开个记录窗口,把时间点、命令和关键输出都贴进去,后面复盘省很多事。补充一点:遇到磁盘满时,除了查大文件,也要看看日志轮转是否失效,容器环境还要特别关注容器日志和镜像层占用。服务重启前先看日志、测配置,确实比直接重启稳得多。
    1小时前

请先登录后再回复 登录

uid:2 一级用户组
关注
发帖 322
评论 0
粉丝 0
关注 0
发新帖
目录
Linux 常见故障排查思路与实用解决方法