¿Cuál es el número máximo de conexiones de cURL establecidas?

Tengo un script que ejecuta 1000 solicitudes de cURL usando funciones curl_multi_ * en PHP.

¿Cuál es el cuello de botella detrás de ellos el tiempo de espera?

¿Sería el uso de la CPU? ¿Hay alguna forma más eficiente, en términos de cómo maneja el número de conexiones salientes el servidor, para hacer esto?

No puedo cambiar la funcionalidad y las solicitudes en sí son simples llamadas a una API remota. Me pregunto cuál es el límite: ¿necesitaría boost la memoria en el servidor o las conexiones Apache o la CPU? (O algo más que me he perdido)

Solutions Collecting From Web of "¿Cuál es el número máximo de conexiones de cURL establecidas?"

Sus solicitudes se realizan en un único hilo de ejecución. El cuello de botella es casi seguro CPU, ¿alguna vez has visto curl código múltiple ejecutar? … es increíblemente adicto a la CPU; porque realmente no tienes suficiente control sobre el manejo de las solicitudes. curl_multi te permite orquestar 1000 solicitudes a la vez, pero esto no es una buena idea. No tiene casi ninguna posibilidad de utilizar curl_multi de manera eficiente porque no puede controlar el flujo de ejecución lo suficientemente fino, solo el servicio de los sockets y seleccionar () ‘en ellos representará gran parte del alto uso de CPU que vería ver su código ejecutarse en la línea de comando.

Las razones por las que el uso de CPU es alto durante tales tareas es esto; PHP está diseñado para ejecutarse durante una fracción de segundo, haz todo lo más rápido posible. Por lo general, no importa cómo se utiliza la CPU, ya que es por un espacio de tiempo tan corto. Cuando se prolonga una tarea como esta el problema se vuelve más aparente, la sobrecarga incurrida con cada código de operación se vuelve visible para el progtwigdor.

Soy consciente de que ha dicho que no puede cambiar la implementación, pero aún así, para obtener una respuesta completa. Tal tarea es mucho más adecuada para Threading que curl multi, y deberías comenzar a leer http://php.net/pthreads , comenzando con http://php.net/Thread

Dejados en sus propios dispositivos en una CPU inactiva, incluso 1000 hilos consumirían tanto CPU como curl_multi, el punto es que puedes controlar con precisión el código responsable de descargar cada byte de respuesta y cargar cada byte de la solicitud, y si el uso de la CPU es una preocupación de que puede implementar un proceso “agradable” al llamar explícitamente a usleep, o al limitar el uso de la conexión de una manera significativa, adicionalmente sus solicitudes pueden recibir servicio en hilos separados.

No sugiero que 1000 hilos sea lo que se debe hacer, es más que probable que no . Lo que se debe hacer es diseñar un Astackble (ver la documentación) cuyo trabajo es hacer y atender una solicitud de una manera “agradable”, eficiente y diseñar grupos (ver ejemplos en las fonts de extensión github / pecl) de los trabajadores para ejecutar su solicitudes recientemente diseñadas …