Linux php-cgi representó el 100% de la solución de memoria

  

se usa el sistema Linux, la computadora se vuelve muy buena, encontró que el proceso php-cgi está ocupando cpu, la tasa de ocupación ha alcanzado el 100%, ¿qué es? ¿Qué causa esta situación? La siguiente pequeña serie le presentará el sistema Linux php-cgi ocupa el 100% de la solución.

Directorio Web logs /home /hosts_log

archivo de registro tiene un sitio web correspondiente ID

directorio de registro de php-cgi /usr ///php_fcgi registros locales

php-fpm.log

slow.log

Ver el archivo de registro básicamente resuelve el problema, el sitio web es pirateado y subió un archivo php ddos, por supuesto, si este no es el problema Puede verificar si es un problema del programa. A veces, el uso de la función file_get_contents también puede hacer que la CPU sea del 100%.

En php.ini, hay un parámetro max_execution_time que establece el tiempo máximo de ejecución de un script PHP, pero en php-cgi (php-fpm) este parámetro no funcionará. Los parámetros reales que pueden controlar el tiempo máximo de ejecución de un script PHP son los siguientes parámetros en el archivo de configuración php-fpm.conf:

El tiempo de espera (en segundos) para atender una única solicitud después de la cual se terminará el proceso de trabajo

Se debe utilizar cuando la opción ‘ max_execution_time ’ ini no detiene la ejecución del script por algún motivo

‘ 0s ’ significa ‘ off ’

"value name = " request_terminate_timeout " 》 0s "/value"

El valor predeterminado es 0 segundos, lo que significa que el script PHP continuará ejecutándose. Por lo tanto, cuando todos los procesos php-cgi están bloqueados en la función file_get_contents (), el servidor web Nginx + PHP ya no puede procesar nuevas solicitudes de PHP, y Nginx devolverá "502 Bad Gateway" al usuario. Es necesario modificar este parámetro y establecer un tiempo máximo de ejecución para un script PHP, pero el paliativo no es una cura. Por ejemplo, cambie a "nombre de valor = " request_terminate_timeout "" 30s "/value". Si file_get_contents () ocurre para obtener contenido web más lento, esto significa 150 procesos php-cgi, que solo pueden procesar 5 por segundo. Las solicitudes, WebServer también son difíciles de evitar < 502 Bad Gateway ".

Para resolverlo completamente, solo puede cambiar el hábito de usar directamente file_get_contents, pero modifíquelo un poco, agregue un tiempo de espera e implemente la solicitud HTTP GET de la siguiente manera. Si tiene problemas, puede empaquetar el siguiente código en una función.

"? Php

$ ctx = stream_context_create (array (

‘ http ’ => array (

‘ timeout ’ = "1 //Establecer un tiempo de espera en Segundos

)

)

);

file_get_contents (" http: //www.111cn.net/", 0, $ ctx );;

? 》

Por supuesto, si la página html se genera como dedecms, la CPU también será 100%.

El proceso php-cgi de Linux ocupa el 100% de la solución a la CPU que se presenta aquí, existe la posibilidad de envenenamiento, lo que requiere un tratamiento antivirus.

Copyright © Conocimiento de Windows All Rights Reserved