Tiempo máximo de ejecución de 300 segundos excedido en pcntl_fork ()

Tengo algunos agentes en ejecución, y después de varias semanas de modo normal, de repente obtenemos:

Maximum execution time of 300 seconds exceeded

en una línea que es

$this->pids[$next_child] = pcntl_fork();

también tenemos:

 [[email protected] ~]# ulimit -u 385913 [[email protected] ~]# ps ax | wc -l 400 [[email protected] ~]# cat /proc/sys/kernel/pid_max 4194303 strace shows poll([{fd=4, events=POLLIN|POLLPRI|POLLHUP}], 1, 1000) = 0 (Timeout) 

estamos en php5.4 centos, ¿podría ser un error de PHP? o lo que podría estar mal?

Este error es un poco críptico. Entonces, debemos hacer algunas depuraciones para llegar al fondo del problema.

Nota: En lugar de concentrarse en la función pcntl_fork o errores de PHP. Me concentraré en que esto es un problema de recursos del sistema. Porque, la línea que arroja el error contiene fork. Veremos a dónde va desde allí

  • El error puede ser un error o sin importancia. Para probar esto, agregue ini_set('MAX_EXECUTION_TIME', -1); al principio de tu script Si su secuencia de comandos se ejecuta como se esperaba sin ningún problema, entonces es cierto. Si no, entonces debemos examinar el comportamiento. Si sus agentes comienzan a tener problemas para atender a los clientes a la misma hora que normalmente lanzarían el error, eso podría significar que el error significaba que los recursos no eran suficientes. Si ese no es el caso, debe examinar el comportamiento de los agentes para que pueda obtener más información sobre la causa del problema.

  • El error puede estar relacionado con el tamaño de la caché de la URL activa que es demasiado alta si la está utilizando según lo que he escuchado.

Si el problema persiste, debe proporcionar más información sobre su entorno y configuraciones para que podamos ayudarlo.

Pregunta: ¿Está usted por casualidad usando Magento?

Es difícil decirlo exactamente sin conocer todo el cuerpo del código … pero mi primera inclinación sería asegurarme de que está matando correctamente los procesos una vez que el guión está listo. Sin eso, el uso de peek podría agotar los recursos para manejar el nuevo proceso, pero debido a su naturaleza el ‘morir’ es muy diferente.

Asegúrate de no estar asumiendo que estás posix_kill( $this->pids[ $next_child ], 15 ); el proceso con exit, prueba posix_kill( $this->pids[ $next_child ], 15 );

Puede intentar usar sig 9 en lugar de 15, pero no recomendaría usarlo en producción, pero puede ayudar a resolver el problema. En realidad, puedes buscar un 9, ese podría ser el problema … posix_kill( $this->pids[ $next_child ], 9 ); no hará ninguna limpieza.