整体思路:网站访问慢,就像旅客去办事路上堵车。
交换机=园区内部通道调度、路由器=出城高速、服务器=办公楼里办事窗口。
我们一层层缩小范围,定位瓶颈在哪。
第一步:先区分,是只有外网用户慢,还是内网访问PHP服务也慢
- 内网,直接用机房内部电脑访问PHP网站(不走路由器,只经过交换机)
- 内网访问也很慢:问题大概率落在交换机 或者 PHP服务器本身。
- 内网访问很快,只有外网用户访问慢:问题基本在路由器、外网线路,和内网交换机、PHP服务器无关。
比喻:园区里面直接进办公楼办事很快;但从城外过来办事很慢,说明堵在出城高速(路由器/外网链路),园区内部道路没问题。
第二步:区分是服务器问题,还是交换机问题(内网慢场景)
内网访问慢,先把服务器本身剥离出来。
- 登录PHP服务器,看服务器资源:CPU、内存、磁盘IO、MySQL慢查询、PHP-FPM进程数。
- CPU跑满、大量慢SQL、磁盘读写很高:服务器本身瓶颈。好比办公楼办事员太少、档案室查询资料耗时,不是道路堵。
- 如果服务器资源负载很低,代码和数据库查询很快,但是网络响应延迟高、丢包:排查交换机。
检查:交换机端口有无错包、CRC错误、端口双工协商异常、带宽打满、广播风暴。比喻:办事窗口人手充足,但园区内部通道拥堵、路口故障,旅客卡在半路。这就是交换机问题。
简单测试命令:在内网机器ping PHP服务器,看延迟是否稳定;再用iperf测内网带宽。
- ping延迟大、有丢包,服务器负载很低 → 交换机故障/链路问题。
- ping延迟很低,但是页面加载耗时很长 → 是PHP、数据库等应用层(服务器内部)的问题。
第三步:判断路由器/外网链路问题(外网慢、内网正常)
内网访问PHP网站飞快,外网访问慢。
用traceroute追踪路由,看延迟在哪一跳突然飙升或者丢包。
- 延迟在出口网关(路由器这一跳)明显变大、出现丢包:路由器瓶颈。
可能原因:路由器CPU负载过高、出口带宽跑满、NAT会话数打满。
比喻:园区内道路通畅,但是高速收费站排队拥堵(路由器)。
- 路由器本身负载正常,延迟升高发生在运营商后面的节点:运营商外网线路问题,不是咱们设备问题。
一套快速判断总结
- 内网访问PHP慢
- 服务器CPU/数据库压力高 →服务器问题
- 服务器负载空闲,但内网ping丢包、延迟抖动大 →交换机/内网网线光模块问题
- 内网访问PHP很快,外网访问慢
- traceroute看延迟,瓶颈在出口网关 →路由器
- 瓶颈在运营商链路 → 外网线路问题
PHP开发场景额外小提示
很多时候页面慢,并不是网络设备问题。哪怕交换机、路由器全都正常,一条没有索引的SQL,就足以让页面响应几十秒。网络设备只负责运送数据包,不负责代码执行、数据库查询。