网站突然打不开、页面白屏或者接口频繁超时,很多人的第一反应是刷新几次,不行就重启服务。但这样往往治标不治本。更高效的做法是沿着网络链路、服务器、应用代码和数据存储这个顺序,一层一层往下查,这样能快速圈定问题范围,避免在无关环节上浪费时间。
网站访问不通,先别急着登录服务器。很多时候问题出在客户端网络或者域名解析上。你可以先用自己的手机切换移动数据访问试试,或者让不同城市的同事同时访问,对比一下是不是只有部分网络或地区受影响,这能帮你快速判断是局部网络问题还是全局故障。
打开命令行,用 nslookup 或 dig 查一下域名解析出的IP地址,和服务器实际的公网IP对不对得上。如果解析结果为空、显示旧IP,或者出现多个不一致的IP,多半是域名后台的A记录或CNAME记录被改错了,也可能是TTL值设得太长,新记录还没全球生效。这时候登录域名注册商后台核对记录,同时检查CDN的回源地址是否正确。很多地区性访问异常,其实根源都在CDN节点故障。
如果 ping 能正常返回数据包,但浏览器还是打不开页面,那问题大概率出在防火墙或云安全组的端口规则上。云服务器用户要进控制台确认80和443端口放行了;也可以用 telnet 服务器IP 443 直接测试端口连通。如果提示连接超时或被拒绝,基本可以锁定是服务器防火墙配置有问题,或者运营商限制了特定端口。注意,ping通只能说明网络通,不代表HTTP服务正常,两者要区分开。
页面响应越来越慢,或者请求频繁超时,大多是服务器资源快被耗尽了。CPU持续100%、内存不足、磁盘写满、带宽被占满,都会让请求排队处理,表面看起来就是访问卡顿甚至直接断连。用 top、free -h 和 df -h 这三条命令,能快速摸清系统的实时资源情况,比盲目重启高效得多。
在 top 输出里按CPU占用排序,重点看排名靠前的进程。常见元凶有植入的挖矿程序、堆积的数据库慢查询,以及没做访问频率限制的采集脚本。结合Web访问日志,能进一步锁定触发异常流量的URL或来源IP。比如某个API接口被外部脚本每秒请求几十次,日志里就会留下密集的访问记录,找到后直接封IP或者加限流规则就行。
磁盘使用率超过80%就要警惕了。日志文件、临时目录或Session存储目录一旦写满,网站会因为无法写入数据而报500错误,清理过期日志和缓存文件通常能很快恢复。内存方面,如果 free -h 显示Swap占用持续走高,说明物理内存已经吃紧,系统正在内存和磁盘之间频繁换页,性能会急剧下降。这时候要么优化常驻内存的进程,要么考虑升级内存配置。
白屏、部分功能失效、接口直接报500,这些问题基本集中在应用层。打开浏览器开发者工具的Network面板,重点看关键请求的HTTP状态码:500代表程序内部异常,404是路由或文件没找到,502说明网关和后端服务通信失败。根据状态码能快速划定排查范围,避免乱猜。另外,不要只看错误码,响应时间也很重要——如果一个接口耗时超过预期,即使返回200,也要检查是不是有慢查询或者循环调用。
应用日志是定位代码问题的关键。出问题时,去查看Web服务器和应用框架的错误日志,定位到具体的报错堆栈。比如Java应用可以看Tomcat或Spring Boot的日志,PHP项目则看PHP错误日志。看到堆栈信息后,根据报错位置回查代码逻辑和接口调用链路。常见问题包括空指针、数组越界、第三方接口超时未处理等。举例来说,如果日志显示某个下游接口响应超过10秒,那多半是这个外部依赖拖慢了整体请求。
当其他环节都正常,但特定功能依然报错,就要怀疑数据库或缓存出问题了。登录数据库执行 SHOW PROCESSLIST,查看是否有大量慢查询堆积,或者锁等待超时的记录。如果是缓存层的问题,比如Redis连不上或内存满了,会导致大量请求直接穿透到数据库,造成数据库压力激增。检查一下缓存服务的连接数和内存占用,必要时重启缓存服务或调整过期策略。
优先确认是不是全站无法访问,还是只有部分用户或部分功能异常。如果是全局性问题,先查网络和DNS;如果是局部功能故障,直接跳到应用层和日志排查。确定范围后再动手,效率要高很多。
没有报错不代表没有问题。从上到下逐步检查:先看网络请求的每个环节耗时,然后查看服务器CPU和内存占用,再看数据库有没有慢查询,最后检查是否有大图片或未压缩的静态资源拖慢了加载速度。完整的链路排查能帮你找到真正的瓶颈。
先用 SHOW PROCESSLIST 找到持有锁的会话,确认对应的事务是否长时间未提交。如果是异常事务,可以直接终止该会话。日常预防上,建议给高频查询的字段加索引,控制事务的粒度,避免在事务中做耗时过长的外部调用,从根源上减少锁冲突。
网站故障排查没有万能套路,但按"网络 → 服务器资源 → 应用代码 → 数据存储"的路径逐层筛查,能大概率减少无效操作。建议你把这套顺序整理成一份简单的检查清单,每次出问题时按步骤走一遍,同时养成记录故障过程和解决方法的习惯。下次再遇到类似情况,就能更快定位并恢复服务了。