2009-03-10 15 views
8

Quiero ejecutar un trabajo cron que realice una limpieza que requiera una gran cantidad de recursos de CPU y Mysql. Quiero que se ejecute solo si el servidor no está relativamente ocupado.¿Cómo puede mi script PHP decir si el servidor está ocupado?

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

Respuesta

12
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 sus necesidades

+0

Nota: solo funcionará en PHP 5.1.3 o posterior, y no en Windows. –

+1

Thx, Chad Birch. Simplemente se olvidó de esto :) servidor de producciones nunca visto con "carga pesada" en ganar :) – SMka

+0

@Chad con PHP <5.1.3 puede reemplazar sys_getloadavg() con la versión de mi respuesta: split ('', file_get_contents ('/ proc/loadavg ')) – vartec

3

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 más 1.0 significa "completamente ocupado".

Hay tres tiempos de "carga" de la CPU en esa salida, dando la carga promedio durante 1, 5 y 15 minutos. Elija lo que tenga sentido para su secuencia de comandos. Definición de "carga" is here.

2

Probablemente puede utilizar la información en la función Mysql List Processes para ver cuántos son 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.

4

En Linux puede obtener la carga del archivo /proc/loadavg.

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