复用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
相关产品推荐
相关产品推荐

