网站出现白屏、卡顿或接口反复报错时,与其反复刷新或重启实例,不如按照从外部到内部的顺序逐层筛查。故障点通常隐藏在网络链路、服务器资源、应用代码以及数据库配置这四类环节中。理清排查顺序再动手,往往能更快恢复线上服务,把对用户的影响控制在最小范围。
网站无法打开时,别急着重启服务器。第一步要判断问题是出在用户端还是服务端。最简单的方式是切换网络环境做对比测试,例如用手机流量替代办公室Wi-Fi访问站点。如果换网络后能正常打开,多半是本地路由器缓存或运营商DNS缓存的问题;若只有某个地区或某一运营商的用户反馈访问异常,则优先怀疑链路拥堵或解析尚未完全生效。
在本地终端中执行nslookup 你的域名,检查返回的IP地址是否与服务器公网IP一致。若结果为空或指向了早已下线的旧地址,通常意味着云控制台上的A记录或CNAME记录配置有误。修改解析后,全球生效需要时间,短则几分钟,长则数小时。同时需要确认是否开启了CDN,以及CDN节点回源是否正常,避免因回源失败导致部分区域用户访问异常。
能ping通服务器却打不开网页,一般不是机器宕机,而是端口未被放行。需要同时检查云厂商安全组和服务器内部防火墙的入方向规则,确保80和443端口对外开放。在本地执行telnet IP地址 443,如果出现连接超时,基本可以锁定是防火墙拦截或运营商封禁。此时建议先查看安全组入方向规则,再逐步核对服务器内的firewalld或iptables配置。
页面响应缓慢、大量请求超时,大多与服务器资源瓶颈有关。CPU持续满载、内存耗尽、磁盘写满或是带宽被打满,都会造成请求排队,进而表现为服务卡顿甚至短暂中断。登录服务器后,建议依次执行top查看负载和CPU占用率、free -h检查内存余量、df -h确认磁盘空间,这组基础命令能快速勾勒出系统整体的运行状态。
在top输出界面按下键盘P键,让进程按CPU占用率从高到低排序。重点关注排名靠前的进程,常见的异常消耗来源包括:被入侵后植入的挖矿木马、缺少索引导致的慢查询堆积,以及恶意爬虫的高频抓取。可以交叉查看Nginx或Apache的访问日志,确认异常请求来自哪些IP和访问路径。举例来说,如果发现某个接口每秒被调用数百次,通过限制请求频率或临时封禁来源IP,通常能迅速缓解服务器压力。
磁盘使用率一旦超过80%就需要主动介入。会话文件、日志或临时目录写满后,程序无法正常创建缓存或写入状态,常直接抛出500错误。清理旧的轮转日志和临时文件,通常能立即释放可用空间。内存方面,如果free -h显示swap分区读写频繁,说明物理内存已经严重不足,系统正不断在内存与磁盘之间换页,性能会急剧下滑。此时应优先优化程序内存占用,必要时考虑扩容内存配置。
页面白屏、部分功能不可用或直接返回5xx状态码时,问题核心大概率落在应用层。打开浏览器开发者工具的Network面板,观察具体请求的响应码与耗时。若某个接口长时间处于pending状态或直接返回500,应立即转去查看后端应用日志。日志通常会记录完整的异常堆栈信息,直接定位到出错的具体代码行,比盲目猜测可靠得多。
结合Nginx访问日志与应用日志的时间戳进行比对,可以还原故障发生的完整时间线。先确认是从哪个时间点开始出现大量错误,再看同一时间段内系统或应用日志中是否有对应的异常记录。例如常见的Connection reset by peer,往往意味着后端服务进程崩溃或主动断开连接;而Timeout则大多指向第三方接口响应过慢或本地线程池被占满。
使用systemctl status或ps -ef | grep java等命令,确认后端服务进程是否仍在正常运行。有时服务并未完全宕机,而是进入了假死状态,表现为端口仍在监听但无法处理新请求。此时可以尝试触发一次健康检查接口,若无响应则考虑重启该服务。需要注意的是,重启前务必备份当前日志,并记录下重启前后的资源占用变化,避免丢失关键排查线索。
当页面整体可访问但特定列表加载极慢,或登录功能频繁报错,往往与数据库环节有关。数据库连接数被打满、慢查询大量堆积、锁等待严重,都是影响后端响应速度的常见因素。
登录数据库后执行show processlist;,观察当前连接状态。如果看到大量Sleep状态的线程堆积,通常是应用层连接池配置过大或未正确释放连接。若多个线程处于Waiting for table metadata lock状态,则说明存在长事务或未提交的DDL语句阻塞了其他请求。建议调整应用连接池的最小与最大连接数,并排查是否存在事务未及时提交的问题。
开启数据库慢查询日志,找出执行时间超过阈值(例如1秒)的SQL语句。拿到慢SQL后,使用explain命令分析其执行计划,重点关注type类型是否出现ALL全表扫描,以及possible_keys是否命中有效索引。常见的处理方式是:为WHERE子句中频繁使用的字段添加组合索引,避免使用select *,以及改写掉在索引列上使用函数的查询条件。需要注意的是,线上大表加索引需谨慎操作,尽量选择业务低峰期执行,避免锁表时间过长。
这种情况多与瞬时资源耗尽或定时任务抢占资源有关。建议先查看故障时间点的系统负载与内存记录,确认是否与定时任务执行时间重合。另外也可能是云服务商的底层宿主机发生迁移或网络抖动,若频率较高,可考虑将服务部署为多实例并接入负载均衡,提高容错能力。
重启只是暂时清空了进程状态和缓存,如果底层诱因未消除,故障自然会重现。重点排查是否存在持续增长的内存泄漏、磁盘上的日志文件是否即将再次写满、以及是否有固定的外部请求在特定时间点打入导致资源耗尽。建议持续监控关键指标并保留故障期间的完整日志,避免反复重启掩盖真实问题。
若部署了监控系统,建议先快速查看故障前后时间段内的CPU、内存、带宽和磁盘指标变化曲线,这能帮助缩小排查范围。但监控数据无法替代日志分析,最终定位问题仍需登录服务器查看应用日志的具体报错内容。两者应结合使用:先看指标定方向,再看日志找根因。
网站故障排查的核心在于建立清晰的排查顺序:从网络层开始确认链路与解析,再检查服务器基础资源是否充足,随后深入应用日志定位代码异常,最后才考虑数据库层面的连接与SQL效率。建议把本文列出的排查命令和判断标准整理成一份内部检查清单,故障发生时按清单逐项执行,能有效避免遗漏关键环节。同时养成保留日志和记录变更的习惯,每一次故障处理结束后整理成复盘笔记,长期积累下来,处理同类问题的速度会越来越快。