当前位置:首页 >  IDC >  服务器 >  正文

服务器故障排查总纲:按现象反查的五层定位法

 2026-09-04 11:10  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

网站挂了的那一刻,绝大多数人的第一反应是重启。重启 Nginx、重启 PHP、实在不行重启服务器。这套动作有一半概率管用,但管用的那一次你也不知道为什么管用。下次它还会来,而且大概率挑你最忙的时候来。

我后来给自己定了条规矩:不管什么故障,都按固定的五层顺序往下查,每层只用一两条命令确认是或不是,绝不跳层。从上往下依次是网络层、网关层、应用层、数据层、系统资源层。这个顺序不是随便排的,它对应的是一次请求真正走过的路径。跳过任何一层,你都可能把上一层的症状当成这一层的病因,然后往完全错误的方向使劲。

第一层网络层,回答的是请求到底到没到服务器。dig 看解析对不对,curl 看端口通不通,云服务器的安全组、运营商的防火墙有没有放行。真事:有人查了两小时 PHP 配置,最后发现是安全组把 80 端口关了。这一层不先确认,后面全是白干。

第二层网关层,也就是 Nginx。用 curl 拿状态码,502 和 504 在这一层就能分家——502 是联系不上上游,504 是上游太慢。再往下翻 error.log,日志里的关键字基本直接点名问题,比任何猜测都准。

第三层应用层。PHP-FPM 活着不等于能干活,进程数被打满的时候新请求是排不上队的。看 FPM 池的状态、看 PHP error_log、看慢日志,判断到底是程序报错还是容量不够。这一层的坑在于,它经常是第四层和第五层问题的替罪羊。

第四层数据层。MySQL 一卡,上面三层全跟着慢。SHOW PROCESSLIST 抓现行,看是 Sleep 堆积还是 Query 排队,两种情况的处置方向完全相反。

第五层系统资源层,放最后看但其实最要命。到这层才掏 top、free、df。很多疑难杂症的根就在这:内存不够被 OOM 杀掉、磁盘写满、inode 耗尽。前四层怎么查都没结果时,答案八成藏在这一层。

#!/bin/bash
# 服务器故障五层自检:从上往下一层层排除,别跳层
DOMAIN="example.com"
LOG="/var/log/nginx/error.log"

echo "===== 第1层 网络层:解析与端口 ====="
dig +short "$DOMAIN"
curl -sS -o /dev/null -m 10 \
-w "http_code:%{http_code} 连接:%{time_connect}s 总计:%{time_total}s\n" \
"https://$DOMAIN/"

echo "===== 第2层 网关层:Nginx 状态与错误日志 ====="
systemctl is-active nginx
tail -n 200 "$LOG" | grep -E "connect\(\)|timed out|Permission denied|too big header|max_children" \
|| echo "近200行 error.log 无关键字,网关层未见异常"

echo "===== 第3层 应用层:PHP-FPM 存活与进程占用 ====="
systemctl is-active php-fpm 2>/dev/null || systemctl is-active 'php*-fpm' 2>/dev/null
ps -o rss= -C php-fpm 2>/dev/null | awk "{s+=\$1} END {printf \"进程数:%d 总内存:%.0fMB\n\", NR, s/1024}"

echo "===== 第4层 数据层:MySQL 连接状态 ====="
mysql -e "SELECT command, count(*) AS cnt FROM information_schema.processlist GROUP BY command;" 2>/dev/null \
|| echo "MySQL 连不上或未安装客户端"

echo "===== 第5层 系统资源层 ====="
uptime
free -m | head -n 2
df -h / | tail -n 1
df -i / | tail -n 1
dmesg -T 2>/dev/null | grep -i "killed process" | tail -n 3

脚本跑完,五层里哪一层先红了就先修哪一层。顺序不能倒过来走,因为上层的报错常常是下层问题的投影。比方说网关层报 502,真正的病因可能是第五层内存不够,PHP 进程被内核杀掉了——你要是只盯着 Nginx 配置改,改到天亮也改不好。

还有个容易忽略的细节:脚本里的 dmesg 需要 root 权限,普通用户跑不出来。用 sudo 执行,否则第五层最关键的 OOM 记录会被静默跳过,你会误以为系统资源一切正常。

重启是止痛药,不是治疗。真正省时间的是那套固定的排查顺序,它把凭感觉猜换成逐层排除,故障来了你不用慌,照着走一遍就知道该动哪里。这个系列后面 24 篇会把这五层里最常见的故障一个个拆开讲,你可以直接从现象翻到对应的那一篇。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关文章

  • 服务器安全基线审计:Lynis一条命令查出你的薄弱项

    服务器被入侵一次,站长往往才知道安全配置有多重要。问题是Linux安全配置分散在SSH、防火墙、内核参数、文件权限、软件包等几十个地方,人工逐项检查不现实。Lynis就是专门解决这个问题的自动化审计工具。Lynis3.1.7是2026年6月发布的版本,包含448多项检查、39个安全领域,跑完会给出一

    标签:
    网站服务器
  • WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上

    WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASPCRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。Nginx上跑ModSecurity用v3

  • 虚拟主机、云服务器、VPS怎么选?建站托管完全指南

    很多人建站卡在第一步:不知道买什么服务器。其实根据你的网站规模和技术能力选就行。虚拟主机,最便宜,年费100到300块。适合日IP不超过1000的小站。缺点是资源共享,邻居站被攻击你也跟着倒霉。VPS(虚拟专有服务器),年费300到800块。独立IP、独立资源,不受邻居影响。适合日IP在5000以内

  • 国内节点 vs 香港节点 vs 海外节点:你的网站应该放哪里?

    服务器放在哪里,直接决定了你的网站打开速度。放错了地方,国内用户打不开、海外客户加载慢、Google排名上不去——选节点这件事,比选配置更重要。国内节点:速度最快,但需要备案。国内节点(北京、上海、深圳、杭州等)的优势是延迟极低——国内用户访问通常在10-30ms。阿里云、腾讯云、华为云在国内都有大

  • 轻量云服务器 vs ECS:新手站长最容易搞混的两种产品,到底该怎么选?

    很多新手站长第一次买云服务器,打开官网看到“轻量应用服务器”和“云服务器ECS/CVM”两个选项,直接懵了——看起来差不多,价格却差了好几倍。到底有什么区别?新手该选哪个?轻量应用服务器:为“不想折腾”的人准备的。轻量应用服务器的核心设计理念是“开箱即用”——CPU、内存、带宽、流量打包成一个套餐,

热门排行

信息推荐