Vous êtes ici : Accueil Zaclys Astuces / Les rubriques / Informatique / Web / PHP

Voir un article

PHP : vérifiez la charge de votre serveur et adaptez vos scripts php

Pour éviter les surcharges de votre serveur web, il convient de surveiller sa charge cpu et de s'y adapter

Si la charge CPU est trop importante, vous pouvez par exemple forcer l'utilisation de vos fichiers de cache (si vous utilisez un CMS), vous pouvez retarder les scripts pour les délayer (usleep), vous pouvez court circuiter certains traitement facultatifs (comptabilisation de visite pour les stats) etc etc

Pour obtenir la charge CPU de votre serveur il suffit de lire le 1er chiffre dans /proc/loadavg
Ce chiffre est un radio / 100 pour 1 CPU : 1 vaut 100%, 2 vaut 200% (cf man pages). 
Mais il convient de diviser cette charge CPU par le nombre de CPU (de coeurs) du serveur, car une charge de processus de 200% équivaut à une charge de 100 sur un processeur bi core.

Voici le script PHP qui va bien : 

// --- by tito of Amigang
// -------------------------------------

session_start();

// ---  1/ récupérer le nombre de coeurs du serveur qui vous héberge :
if ( $_SESSION["cores"] == '') {
    exec("grep cores /proc/cpuinfo |head -n 1 |sed 's/.* //'", $out,$rc );
    if ( ereg('^[0-9]+$',$out[0])) $_SESSION["cores"] = $out[0];
}

// --- 2/ verifie la charge CPU
$loadavg =0 ;
$fd=@fopen('/proc/loadavg','r');
if ( $fd ) {
    if ( $loadavg =  fscanf($fd, "%f")) {  // --- lit la charge systeme
        fclose ($fd);

        // ramene en % et divise par le nb de coeurs :
        $loadavg = ceil( $loadavg[0] *100 /$_SESSION["cores"]  ) ; 

        // si besoin :
        if ( $loadavg > 200 ) { echo "Je sature à 200%. A+.";  exit();  }
        if ( $loadavg >= 100 ) {
            sleep( ceil($loadavg/20) ) ;
        }
    }
}



Voila, après avoir éxecuter ce bout de code, la variable $loadavg vous donne à peu pres la charge CPU en % de votre machine (à peu pres car il ne tient pas compte des iostats et autres variables d'ajustement)

A vous de mettre ensuite les if qui vont bien pour faire des usleep et autre court circuits ...


Je vous invite à combiner ceci avec une détection des crawlers PHP : comment détecter les robots (php crawler detect), pour ralentir les crawler proportionellement à la charge cpu de votre machine , ce qui pourrait vous donner aprs avoir compiler ces 2 scripts :

// si crawler et charge > 100 % : bye bye
if ( $crawler && $loadavg >=100 ) {
  echo "g bo etre matinal g mal (cpu  à $loadavg%), reviens plus tard...";
  exit();
}

// si crawler : temporize d'autant que la charge cpu est grande
if ( $crawler ) usleep( 500000 + $loadavg * 10000 );

// pour les autres : temporize aussi mais un peu moins : 
else usleep( $loadavg * 10000 );


7 115 clics - Créé le 05/05/2010 par Tito - Modifié le 05/05/2010



Réagissez, commentez, discutez ...



Partager ?

diaspora  G+  facebook  twitter  Digg  Yahoo  Delicious  Technorati  myspace


Voir d'autres articles en rapport avec celui-ci ?



Stats des clics sur cet article : cliquez ici »



Vous voulez contribuer et publier un article dans cette rubrique ?

InfoMerci de vous identifier ou de vous créer un compte si ce n'est pas déjà fait.


ATTENTION
Vous êtes ici sur l'ancien site de l'association Zaclys.
Depuis 2019 notre site est ici : nouveau site Zaclys

icone user Me connecter :

InfoMerci de saisir vos identifiants.




Me reconnecter automatiquement à chaque visite sur ce navigateur :
               





retour






Plan du site | Aide | Mentions légales et CGU | RGPD | Travaux et incidents | Budget | Faire un don | Chouchen | Z pub | Logo et prospectus

© Association la mère Zaclys 1998-2024  - Zaclys v2.5

Suivez nous sur Diaspora, Mastodon, Google+, FaceBook ou Twitter