如何降低网页请求过程中产生的Connecting(连接)耗时
网站连接耗时优化排查指南
耗时根因排查思路
连接耗时通常由DNS解析、TCP三次握手、TLS握手三个核心阶段组成,117ms的耗时可以先通过命令行工具定位具体占比最高的阶段:
执行curl -w "%{time_namelookup} | %{time_connect} | %{time_appconnect}\n" -o /dev/null -s 你的站点域名,返回的三个数值分别对应:
- DNS解析完成耗时
- TCP握手完成耗时(从请求发起到TCP握手结束)
- TLS握手完成耗时(从请求发起到TLS握手结束)
你提供的耗时截图未展示各阶段拆分,优先执行上述命令定位问题
可能的原因及对应优化方案
1. DNS层面问题(Godaddy DNS相关)
- 触发场景:如果自测得到的
time_namelookup数值超过50ms,基本可以判定是DNS解析导致的耗时偏高。Godaddy的DNS节点覆盖度远低于头部云厂商DNS服务,若你的用户分布和Godaddy的节点覆盖不匹配,很容易出现解析延迟。 - 优化方案:
- 切换到AWS Route53确实能带来明确的优化收益,Route53的全球节点覆盖更广,针对全球用户的场景普遍可以降低20~60ms的DNS解析耗时
- 前端页面添加DNS预解析配置,在页面head标签中添加
<link rel="dns-prefetch" href="//你的站点域名">,降低用户首次访问的解析等待
2. SSL/TLS层面问题
- 触发场景:如果
time_appconnect - time_connect的差值超过40ms,说明TLS握手占了连接耗时的主要部分。常见诱因包括未开启TLS会话复用、使用老旧TLS协议、证书链配置不完整、加密套件优先级不合理。 - 优化方案(针对Apache服务):
- 升级到TLS1.3协议,相比TLS1.2减少1次RTT,握手耗时可直接降低30%以上
- 开启TLS会话复用,在Apache的ssl配置文件中添加如下配置:
SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000) SSLSessionCacheTimeout 300 - 优化证书链,移除多余的中间证书,减少握手过程中的证书传输体积
- 优先配置ECDHE类的加密套件,降低握手阶段的算力耗时
3. 网络与Apache配置问题
- 触发场景:如果
time_connect - time_namelookup的差值偏高,说明TCP握手链路耗时过高,常见诱因包括服务器与用户跨运营商/跨地域访问、Apache的keepalive未开启、TCP快速打开未配置。 - 优化方案:
- 调整Apache的keepalive配置:
允许同一个TCP连接处理多个请求,避免重复建连开销KeepAlive On KeepAliveTimeout 60 MaxKeepAliveRequests 100 - 开启TCP快速打开:修改内核参数
net.ipv4.tcp_fastopen = 3,同时Apache开启对应支持,减少TCP握手的RTT开销 - 若用户分布跨地域/跨运营商,接入CDN服务将静态资源缓存到边缘节点,直接降低用户到服务端的链路耗时
- 调整Apache的keepalive配置:
内容的提问来源于stack exchange,提问作者The Fair Technology
相关产品推荐
相关产品推荐

