跳转到内容

排查方法论

遇到问题时,盲目搜索和试错往往浪费大量时间。本文介绍一套适用于 EL 系统的通用排查框架。

  1. 先观察,后行动 — 在修改任何配置之前,先收集足够的信息
  2. 从近到远 — 先检查最近的变更,再扩大排查范围
  3. 一次只改一个变量 — 每次只修改一项,验证后再改下一项
  4. 记录过程 — 记下你做了什么、看到了什么
  1. 明确问题现象

    能具体描述问题吗?“网站打不开”不够具体,“访问 80 端口返回 connection refused” 才是有效描述。

  2. 检查最近的变更

    查看最近的系统日志
    $ sudo journalctl --since "1 hour ago" --priority err
    查看最近安装/更新的包
    $ dnf history list --reverse | tail -20
  3. 检查服务状态

    查看相关服务的状态和日志
    $ sudo systemctl status <服务名>
    $ sudo journalctl -u <服务名> -n 50 --no-pager
  4. 检查资源

    磁盘空间
    $ df -h
    内存使用
    $ free -h
    CPU 和进程
    $ top -bn1 | head -20
  5. 检查网络

    端口监听状态
    $ sudo ss -tlnp
    防火墙规则
    $ sudo firewall-cmd --list-all
  6. 检查 SELinux

    SELinux 拒绝是 EL 系统上非常常见的问题来源:

    查看 SELinux 拒绝日志
    $ sudo ausearch -m avc -ts recent
    查看 SELinux 当前模式
    $ getenforce
  7. 查阅日志文件

    系统日志
    $ sudo journalctl -xe
    特定应用日志(以 nginx 为例)
    $ sudo tail -50 /var/log/nginx/error.log
目标命令
系统全部日志journalctl
当前启动的日志journalctl -b
指定服务日志journalctl -u sshd
实时跟踪日志journalctl -f
错误级别以上journalctl -p err
指定时间范围journalctl --since "2024-01-01" --until "2024-01-02"
  • 不要第一时间关闭 SELinux — 先排查是否是 SELinux 策略问题
  • 不要随意 chmod 777 — 这会引入安全风险,应该找到正确的权限设置
  • 不要忽略磁盘空间/var/log 写满是非常常见的故障原因
  • 不要忘记防火墙 — 服务正常但外部访问不了,很可能是 firewalld 规则问题