【问题标题】:High CPU usage in libcurl with ssl url带有 ssl url 的 libcurl 中的 CPU 使用率高
【发布时间】:2011-10-27 07:47:34
【问题描述】:

我使用 10 个线程连接到 https 连接。 Curl 占用了 100% 的 CPU。 我怎样才能减少呢?

每个线程代码都像

curl_connection = curl_easy_init();

现在使用相同的连接

setting some header then 
curl_easy_perform(curl_connection);

【问题讨论】:

  • 为什么要让它运行得更慢?如果你想要更多的 CPU 用于其他事情,nice 进程。很可能,您正在做的事情是受 CPU 限制的,因此它将使用所有可用的 CPU 尽快完成工作。
  • 目前我们正在运行 10 个爬虫,那么当我们开始拥有 100 个爬虫时会发生什么?
  • 其他进程的cpu怎么样。因为我的进程正在吃满 CPU
  • 您希望它运行慢还是快?这是你的选择。你只有这么多的CPU。你可以选择如何使用它,但你不能做更多。如果您希望其他事情获得更高的优先级,请使用“nice”来给这个进程更少的 CPU。或者,您可以优化此程序以使用更少的 CPU 完成更多工作。 (你分析过吗?)
  • 是的。我使用 callgrind 进行了分析,它在 curl_easy_perform 中显示 92% 的使用率

标签: ssl curl


【解决方案1】:

您可以通过运行其他任务来减少它,然后这些任务将拆分CPU。否则,您希望 CPU 做尽可能多的有用工作。不是说可以留着以后用。

【讨论】:

    【解决方案2】:

    对于在libcurl 中寻找高 CPU 使用率解决方案的其他人: 它使用大量 CPU 资源来初始化 libcurl 简单句柄 curl_easy_init() 然后使用 curl_easy_cleanup(_pCurl) 破坏它。 要减少libcurl 的CPU 使用率,您需要创建一个libcurl 句柄池,并通过在句柄上调用curl_easy_reset() 来重用每个句柄。或者,您可以不实现libcurl 句柄池,而是为每个线程初始化一次句柄,然后在每个新的网络请求之前循环调用curl_easy_reset()

    【讨论】:

      【解决方案3】:

      我猜你在主线程中调用 curl_easy_perform,避免这个,但在子线程中调用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        相关资源
        最近更新 更多