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