网站出现卡顿、打不开或接口报错时,与其反复刷新页面,不如按从网络、服务器、应用到数据库的顺序逐层筛查。这种分层排查的思路能帮你快速锁定真正的问题环节,把时间花在刀刃上。
动服务器之前,先判断问题出在客户端网络还是域名解析。一个有效的办法是切换手机流量访问,或者请不同地区的朋友帮忙打开同一个网址。如果换了网络就恢复正常,那问题多半出在本机或本地网络;要是只有某些区域的用户打不开,可能是骨干网络波动或域名解析还没全局生效。
在终端用nslookup或dig命令查看域名当前解析出的IP,和服务器公网IP逐一对照。如果结果为空或指向旧地址,通常是A记录或CNAME记录被误改,也可能TTL设得太长,全球DNS节点还在用旧缓存。这时候要登录域名后台检查解析记录,同时确认CDN回源配置是否还对。若只有部分区域用户访问不了,多半是CDN节点缓存了过期源站内容,刷新CDN缓存再试即可。
有时ping能通,但浏览器就是打不开页面,这通常指向防火墙或安全组没放行HTTP/HTTPS流量。用云服务器的话,去控制台确认80和443端口已在入方向规则里放行;再用telnet 服务器IP 443测一下端口能不能连。提示超时或被拒,基本就是安全组或防火墙的问题,也可能是运营商对端口有限制,这时可换端口或提交工单咨询。
当页面响应明显变慢或请求频繁超时,很可能是服务器资源快耗尽了。CPU长期跑满、内存所剩无几、磁盘告急或出口带宽被占满,都会让请求在队列里堆积,用户感受到的就是卡顿甚至断连。用top、free -h和df -h三个命令能快速看到资源实时消耗,判断瓶颈在哪一侧。
在top输出里按CPU占用排序,重点看负载高的进程。常见异常有这么几类:服务器被植入挖矿木马、数据库慢查询堆积、或是缺频率限制的采集脚本一直打接口。配合Web访问日志,看哪些URL或来源IP制造了大流量。比如某个外部程序每秒多次请求同一接口,导致PHP进程数暴涨,日志里会清楚留下这个IP的记录,把它加进黑名单就能恢复服务。
磁盘使用率到80%就得重视了。日志文件、临时目录和Session目录一旦写满,网站就没法写入新数据,页面会抛500错误。定期清理历史日志和过期缓存是基本操作,同时可以给日志目录单独分区,防止日志膨胀拖垮整个系统。另外free -h里看到swap被大量使用,说明内存不够了,先查是否有进程内存泄漏,必要时调整PHP或Java的堆内存上限。
网络和服务器都正常,问题往往在应用本身。Web服务器日志和应用框架日志是两条核心线索,错误信息里通常藏着具体原因,比如某个函数的参数类型不对、依赖的外部服务超时等。
以Nginx为例,error.log会记录4xx和5xx状态码对应的具体报错;PHP的error_log或Laravel框架的日志文件则会显示异常的堆栈信息。看到日志里有大量“Slow query”或“Connection timed out”,就要顺着去查是代码里哪一次SQL查询或外部API调用导致。判断标准是:如果日志里同类错误在时间上密集出现,问题几乎可以确定在对应代码路径里。
代码层面的常见坑包括:未加缓存的循环查询数据库、第三方接口调用没有设置超时时间、以及异常捕获不完整导致进程崩溃。建议给外部依赖调用统一加上超时参数,比如在PHP里用cURL时设置CURLOPT_TIMEOUT为5秒,并在失败时走降级逻辑,而不是让请求一直挂着。
页面加载慢但服务器资源不算高,那就得多看数据库一眼。慢查询日志、索引使用情况和连接数都是要关注的指标,这几点对性能影响最直接。
开启MySQL的慢查询日志,把执行时间超过1秒的SQL捞出来。大多数慢查询的根源是没走索引,用EXPLAIN看一下语句的执行计划,如果看到全表扫描,那就该建合适的联合索引。举个例子,一个订单查询按用户ID和时间筛选,却只给用户ID建索引,数据量大时依然很慢,补上(user_id, created_at)的联合索引后耗时能从几秒降到几十毫秒。
连接数爆满通常表现为“Too many connections”错误,背后的原因可能是代码里连接没释放,也可能是高并发下连接池配得偏小。修改数据库的max_connections只能救急,更重要的是在应用层合理配置连接池并确保用完即归还。另外,大批量更新或报表查询容易造成行锁或表锁,把这类操作安排到低峰期批量执行,或者拆分成小批次处理,能有效降低锁等待的冲突。
这种间歇性故障多半指向资源瓶颈,比如数据库连接数在高峰期达到上限、内存出现短暂的耗尽,或者是某台负载均衡后的服务器节点性能较差导致部分请求被导向坏节点。排查时先看请求分布和错误日志,确认是固定时间段还是固定请求路径触发了问题。
先分清是源站问题还是CDN节点问题。直接用服务器IP加Host头访问源站,如果能正常打开,说明源站没问题,重点检查CDN的回源配置和缓存设置。常见的原因是回源协议不匹配(如源站只支持HTTP而CDN以HTTPS回源)或缓存规则把动态页面也缓存了,刷新CDN缓存并调整配置一般能解决。
重启掩盖了问题但没有根治。这类情况多数是内存泄漏、日志文件不断膨胀或数据库慢查询逐步累积导致的。建议在重启后持续监控资源使用趋势,特别关注内存占用随时间的爬升曲线以及慢查询数量的增长情况,针对性地修复代码或调整配置,才能避免反复重启。
网站故障排查的核心是缩小范围再动手,从网络、服务器、应用到数据库一层层过,而不是凭感觉乱试。建议平时就建立一份排查清单,把常用命令和检查项做成文档,配合监控告警工具,能在故障发生时大幅压缩定位时间。记住四个关键动作:先看网络和DNS,再看系统资源,然后查应用日志,最后深入数据库性能,每一步都有据可依。