Voir un article

nextcloud tuning : renice some users

pour ralentir certains users...

1/ crer un script php adapté, par exemple /var/www/html/zcool.php

<?php
 
// config                                                                                                      
$NBVCORES=40;
$DEBUG=0;
 
// inits                                                                                                        
$buf=$uid=$quota=null;
 
// letsgo                                                                                                       
$uid = OC::$server->getSession() ? OC::$server->getSession()->get('user_id') : null;
if ($uid != null ) $quota = OC_Util::getUserQuota( $uid );
 
// hopla                                                                                                        
if ( true  ) {
 
  $loadavg=100;
  // check load avg du serveur en %                                                                             
  $fd=@fopen('/proc/loadavg','r');
  if ( $fd ) {
    if ( $loadavg =  fscanf($fd, "%f")) {
      fclose ($fd);
      $loadavg = ceil( $loadavg[0] *100 / $NBVCORES );
    }
  }
 
  // hache si charge à 200%                                                                                     
  if ($loadavg > 200) exit();
 
  //  bride si charge > 30% :                                                                                   
  if ( $loadavg > 30 ) {
 
 
      $level=0;
      if ( $uid != null && $quota >0 ) $level = $quota / 5368709120;
      if ( $level<1 ) $level = 0 ;
 
      $bride= $loadavg / 100 * 1000000;   // 100% = 1 sec en millionieme de seconde                             
      if ($uid == null ) $bride/=5;  // anonymes : be cool (login et partages...)      
      else if ($level==0 ) $bride*=5;  // ecossais           
      else if ($level >= 2 ) $bride/= ( 3*$level);  // adhérents L2+ 
                    
      if ($bride<0) $bride=0;
      $bride=ceil($bride);
 
     // debug ?                                                                                                 
     if ($DEBUG) {
        if ($uid== null ) $uid = 'ANONYME';
        else if ($level == 0 ) $ecossais = "ECOSSAIS";
       $buf = "$loadavg% $bride microsec / level $level uid $uid $ecossais \n";
       $fd=fopen("/dev/shm/zcool.debug","a+");
       fputs($fd, $buf);
       fclose($fd);
     }
 
     usleep($bride);
 
  }
}
?>
 
 

2/ patcher nextcloud pour appeler ce "nice" script aux endroits stratégiques :

* on mode soft (tres insuffisant) modifier nextcloud/index.php                                                  
*     apres :  require_once __DIR__ . '/lib/base.php';                                                          
*   ajouter :  require('/var/www/html/zcool.php');                                                              
*                                                                                                               
* on mode sérieux (car certains appels ajax ne passent pas par index.php)                                       
* dans nextcloud/lib/private/legacy/user.php :                                                                  
*    dans la fonction : getUser()                                                                               
*    ajouter en 1ere ligne : require('/var/www/html/zcool.php');                                                
*    (NB : ici il sera appelé entre 5 et 15x pour chaque page... )                                              
*                                                                      


3 722 clics - Créé le 21/01/2015 17:54 par MereZaclys - Modifié le 06/09/2019 15:13



Réagissez, commentez, discutez ...

Soyez le premier à réagir !



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 ?

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