设置的最大cURL连接数是多少?

时间:2012-12-13 00:13:45

标签: php apache curl

我有一个脚本,它使用PHP中的curl_multi_ *函数运行1000个cURL请求。

他们超时的瓶颈是什么?

是CPU使用率吗?就服务器处理的出站连接数量而言,是否有更有效的方法来执行此操作?

我无法更改功能,请求本身就是对远程API的简单调用。我只是想知道限制是什么 - 我需要增加服务器,Apache连接或CPU的内存吗? (或者我错过的其他东西)

1 个答案:

答案 0 :(得分:12)

您的请求是在单个执行线程中进行的。瓶颈几乎肯定是CPU,你有没有真正看过curl多代码运行? ...这是令人难以置信的cpu饥饿;因为你对处理请求没有足够的控制权。 curl_multi使您可以一次编排1000个请求,但这并不是一个好主意。你几乎没有机会有效地使用curl_multi,因为你无法很好地控制执行流程,只是为套接字提供服务并选择()它们会占用你看到代码运行时的大量高CPU使用率。命令行。

在此类任务中CPU使用率高的原因是这样的; PHP的设计运行时间只有几分之一秒,尽可能快地完成所有事情。 CPU的使用方式通常无关紧要,因为它的使用时间很短。当您延长这样的任务时问题变得更加明显,每个操作码产生的开销对程序员来说都是可见的。

我知道你已经说过你不能改变实现,但仍然可以得到一个完整的答案。这样的任务比curl multi更适合线程化,你应该从http://php.net/pthreads开始阅读http://php.net/Thread

在空闲CPU上留给他们自己的设备,即使1000个线程也会消耗与curl_multi一样多的CPU,关键是你可以精确控制负责下载每个响应字节的代码并上传请求的每个字节,如果CPU使用率是一个问题,您可以通过显式调用usleep或以有意义的方式限制连接使用来实现“好”的过程,此外,您的请求可以在不同的线程中进行服务。

我不建议要做1000个线程,它很可能不是。要做的就是设计一个Stackable(参见文档),其工作是以“漂亮”,高效的方式制作和服务请求,并设计工作池(请参阅github / pecl扩展源上的示例)来执行新设计的请求......