2009-03-10 3 views
8

Je veux exécuter un travail cron qui effectue un nettoyage qui nécessite beaucoup de ressources CPU et Mysql. Je veux qu'il s'exécute seulement si le serveur n'est pas relativement occupé.Comment mon script PHP peut-il indiquer si le serveur est occupé?

Quel est le moyen le plus simple de déterminer cela à partir de PHP? (par exemple, y a-t-il une requête qui renvoie combien de requêtes ont été effectuées à la dernière minute? ...)

Répondre

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.'); 
    } 
} 

Essayez de mettre à jour cette fonction à vos besoins

+0

Remarque: ne fonctionnera qu'en PHP 5.1.3 ou plus récent, et non sur Windows. –

+1

Thx, Tchad Bouleau. Simplement oublié à ce sujet :) Serveur de productions jamais vu avec "charge lourde" sur win :) – SMka

+0

@Chad avec PHP <5.1.3 vous pouvez remplacer sys_getloadavg() par une version de ma réponse: split ('', file_get_contents ('/ proc/loadavg ')) – vartec

3

S'il s'agit d'un système Unix, analysez la sortie de uptime. Cela montre la charge du processeur qui est généralement considérée comme une bonne mesure de "occupé". Tout ce qui est proche ou plus 1.0 signifie "complètement occupé".

Il y a trois temps de "charge" du processeur dans cette sortie donnant la moyenne de charge sur 1, 5 et 15 minutes. Choisissez celui qui a du sens pour votre script. Définition de «charge» is here.

2

Vous pouvez probablement utiliser les informations dans la fonction Mysql List Processes pour voir combien sont actifs contre le sommeil, un indicateur correct de la charge sur la base de données. Si vous utilisez Linux, vous pouvez utiliser la fonction Sys GetLoadAvg pour voir la charge globale du système.

4

Sous Linux, vous pouvez charger le fichier /proc/loadavg.

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