You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CURL与命令行curl请求随机变慢,正常0.3s偶发超10秒如何解决

从你提供的curl_getinfo指标可以先定位到耗时异常的阶段:
慢请求中connect_time(TCP握手耗时)达1.5s,正常仅0.004s;pretransfer_time(SSL握手完成耗时)达6.8s,正常仅0.012s。且域名解析耗时正常,排除DNS问题;请求任意外部站点都可复现,排除后端服务问题,问题100%出在前端服务器本身的网络/系统配置层面。

排查步骤

1. TCP层问题排查

  • 先验证网络链路丢包/抖动:使用tcp模式的mtr探测到目标IP的链路质量,执行命令 mtr --tcp --port 443 83.XXX.X.XXX 连续发送100个包,观察是否有节点丢包率超过1%、或者延迟跳变超过1s的情况。
  • 检查SYN丢包/队列溢出:执行 dmesg | grep -i tcp 查看是否有 syn flood、time wait bucket table overflow 之类的报错;执行 ss -lnt 查看监听端口的Send-Q值,如果长期处于满额状态,说明TCP半连接/全连接队列溢出,会导致SYN包被丢弃,TCP默认1秒后才会重发SYN,直接导致握手耗时飙升。
  • 验证MTU配置问题:部分中间链路会禁用PMTU探测,导致1500的默认MTU大包被丢弃触发重传,可临时修改网卡MTU为1400验证:ifconfig 你的网卡名 mtu 1400,如果测试后慢请求消失,就把MTU配置永久写入网卡配置文件。

2. SSL层问题排查(大概率根因)

pretransfer_time 异常飙升99%的概率是系统熵池不足导致的:SSL握手需要读取随机数,当系统熵池耗尽时,读取/dev/random的操作会陷入阻塞,直到有足够的熵生成。

  • 验证熵池状态:执行 cat /proc/sys/kernel/random/entropy_avail,如果返回值长期低于300,即可确认是熵不足问题。
  • 修复方案:安装haveged服务补充熵池:
# Debian/Ubuntu
apt update && apt install -y haveged
systemctl enable --now haveged

# CentOS/RHEL
yum install -y haveged
systemctl enable --now haveged

安装完成后再执行熵池查询命令,正常会回到1000以上,再测试curl请求即可看到耗时恢复正常。

3. 其他边界情况排查

  • 检查出口防火墙/安全组规则:确认是否有对443端口的限流、随机丢包规则,可临时关闭防火墙测试对比。
  • 检查系统代理配置:执行 echo $http_proxy $https_proxy 确认是否配置了不稳定的代理服务,导致请求被转发后出现延迟。

内容的提问来源于stack exchange,提问作者Marco Heine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:45:03