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

复用libcurl句柄切换IP时性能骤降问题求助

libcurl复用句柄切换IP时性能骤降问题

首次开发libcurl相关功能时遇到异常:复用同一个CURL句柄以复用其关联连接,但频繁切换请求IP时性能大幅下降;若保持IP不变则一切正常。

代码示例

// curl init
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &RestClientPool::WriteCallBack); // custom write function
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 200L);

// perform request, curl handle is stored and reused
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
curl_easy_setopt(curl, CURLOPT_URL, req_url.c_str());  // here req_url is something like http://123.123.123.123:8080/api/api
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
CURLcode res = curl_easy_perform(curl);

问题详情

  • 假设有IP为a、b、c的三台主机,使用同一句柄循环向a、b、c发起100次请求耗时约9秒;而向a重复发起100次请求仅耗时1秒(所有主机服务一致,排除主机自身问题)。
  • 经监控及verbose日志确认,libcurl句柄已复用连接,因此IP切换时新建连接并非问题原因。

环境信息

  • libcurl:curl 7.86.0 (x86_64-pc-linux-gnu) libcurl/7.86.0 OpenSSL/1.0.2k-fips zlib/1.2.7,发布日期2022-10-26
  • 操作系统:CentOS 7.6.1810

已尝试方案

  • 使用CURLOPT_RESOLVE(怀疑DNS缓存问题),无改善;
  • 创建三个句柄分三个线程,每个线程重复请求同一IP时正常,但每个线程请求不同IP时性能下降问题重现。

内容的提问来源于stack exchange,提问作者Franky Pan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:55:43