Pregunta

Quiero ejecutar un trabajo cron que realice una limpieza que requiera muchos recursos de CPU y Mysql. Quiero que se ejecute solo si el servidor no está relativamente ocupado.

¿Cuál es la forma más sencilla de determinar eso desde PHP? (por ejemplo, ¿hay una consulta que devuelve cuántas consultas se realizaron en el último minuto? ...)

¿Fue útil?

Solución

if (function_exists('sys_getloadavg')) {
    $load = sys_getloadavg();
    if ($load[0] > 80) {
       header('HTTP/1.1 503 Too busy, try again later');
       die('Server too busy. Please try again later.');
    }
}

Intenta actualizar esta función a tus necesidades

Otros consejos

En Linux puede cargar el archivo / proc / loadavg .

$load = split(' ',file_get_contents('/proc/loadavg'))
$loadAvg = $load[0]

Si se trata de un sistema Unix, analice la salida de uptime . Esto muestra la carga de la CPU, que generalmente se considera una buena medida de "ocupado". Cualquier cosa cerca o por encima de 1.0 significa "completamente ocupado".

Hay tres CPU '' cargar '' veces en esa salida dando el promedio de carga durante 1, 5 y 15 minutos. Elija lo que tenga sentido para su guión. Definición de " load " está aquí .

Probablemente pueda usar la información en los Procesos de la lista de Mysql función para ver cuántos están activos frente a dormir, un indicador decente sobre la carga en la base de datos.

Si está en Linux, puede usar la función Sys GetLoadAvg para ver la carga general del sistema .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top