Bonjour à tous,
Je suis confronté depuis quelques temps à des blocages temporaires de mon jeedom, liés à un nb de porcess au niveua de la BD trop important (150). au bout de 30 min, la situation se normalise.
A ce jour, je n’arrive pas à analyser le pb lorsqu’il se produit. Soit je ne suis pas devant un PC, soit on me met la pression pour que ca redemarre rapidement (J’ai un WAF Pressé !)
Bref, je vous partage un bloc code très simple à intégrer à un scenario qui, je l’espère, me permettra la prochaine fois d’avoir le temps d’analyser le pb.
Prérequis : créer une commande virtuel info numérique historisée qui va loguer le nb de process. pour l’historisation, pas de calcul, archivage 7 jours, répéter les valeurs identiques à Oui
Scenario : à lancer toutes les minutes :
$version = '23/03/2024 12:00' ;
$scenario->setLog('┌──────────── Logs bloc code - version du '.$version);
$scenario->setLog('| ');
$seuilProcess = 140 ; // Seuil d'alerte pour le nb de process msql
$cmdProcess = cmd::byString('#[Aucun][MySQL Process][Nb Process]#') ;
// ANALYSE DES PROCESS :
$sql_nb_process = "SHOW PROCESSLIST" ;
$results_process = DB::Prepare($sql_nb_process, NULL, DB::FETCH_TYPE_ALL);
$nb_process = count($results_process) ;
$scenario->setLog('| Nb total de process : '.$nb_process );
$cmdProcess->event($nb_process) ;
if ( $nb_process >= $seuilProcess ) {
$scenario->setLog('| /!\ Nb de process supérieur à '.$seuilProcess) ;
$scenario->setLog('| /!\ Analyse de tous les process') ;
$scenario->setLog('| ');
$scenario->setLog('| '.str_pad(substr('ID',0,6),6,' ',STR_PAD_RIGHT).' '.str_pad(substr('User',0,6),6,' ',STR_PAD_RIGHT).' '.str_pad(substr('Host',0,10),10,' ',STR_PAD_RIGHT).' '.str_pad(substr('Cmd',0,5),5,' ',STR_PAD_RIGHT).' '.str_pad(substr('Temps',0,5),5,' ',STR_PAD_RIGHT).' '.str_pad(substr('Etat',0,8),8,' ',STR_PAD_RIGHT).' '.str_pad(substr('Prog',0,5),5,' ',STR_PAD_RIGHT).' '.str_pad(substr('Infos',0,30),30,' ',STR_PAD_RIGHT));
foreach ($results_process as $process) {
$id = $process['Id'];
$user = $process['User'];
$host = $process['Host'];
$command = $process['Command'];
$time = $process['Time'];
$state = $process['State'];
$info = $process['Info'];
$progress = $process['Progress'];
$scenario->setLog('| '.str_pad(substr($id,0,6),6,' ',STR_PAD_RIGHT).' '.str_pad(substr($user,0,6),6,' ',STR_PAD_RIGHT).' '.str_pad(substr($host,0,10),10,' ',STR_PAD_RIGHT).' '.str_pad(substr($command,0,5),5,' ',STR_PAD_RIGHT).' '.str_pad(substr($time,0,5),5,' ',STR_PAD_RIGHT).' '.str_pad(substr($state,0,8),8,' ',STR_PAD_RIGHT).' '.str_pad(substr($progress,0,5),5,' ',STR_PAD_RIGHT).' '.str_pad(substr($info,0,30),30,' ',STR_PAD_RIGHT));
}
}
$scenario->setLog('└───────────────────────────');
Le scenario loguera le nb de process en cours dans une commande info et si ce nb est superieur à un seuil inscrira dans les logs du scenario la liste des process pour analyse ulterieure
[2024-03-23 12:42:02][SCENARIO] | Nb total de process : 24
[2024-03-23 12:42:02][SCENARIO] | /!\ Nb de porcess superieur à 10
[2024-03-23 12:42:02][SCENARIO] | /!\ Analyse de tous les process
[2024-03-23 12:42:02][SCENARIO] |
[2024-03-23 12:42:02][SCENARIO] | ID User Host Cmd Temps Etat Prog Infos
[2024-03-23 12:42:02][SCENARIO] | 60700 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 60701 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 60703 jeedom localhost Sleep 1 0.000
[2024-03-23 12:42:02][SCENARIO] | 60704 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 151281 jeedom localhost Sleep 10 0.000
[2024-03-23 12:42:02][SCENARIO] | 158134 jeedom localhost Sleep 3 0.000
[2024-03-23 12:42:02][SCENARIO] | 158135 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 158136 jeedom localhost Sleep 2 0.000
[2024-03-23 12:42:02][SCENARIO] | 159341 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 159343 jeedom localhost Sleep 2 0.000
[2024-03-23 12:42:02][SCENARIO] | 167519 jeedom localhost Sleep 1 0.000
[2024-03-23 12:42:02][SCENARIO] | 171217 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 171319 jeedom localhost Sleep 28 0.000
[2024-03-23 12:42:02][SCENARIO] | 171320 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 171508 jeedom localhost Sleep 2 0.000
[2024-03-23 12:42:02][SCENARIO] | 171853 jeedom localhost Sleep 1 0.000
[2024-03-23 12:42:02][SCENARIO] | 171996 jeedom localhost Sleep 1 0.000
[2024-03-23 12:42:02][SCENARIO] | 172286 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 172663 jeedom localhost Sleep 2 0.000
[2024-03-23 12:42:02][SCENARIO] | 173622 jeedom localhost Sleep 1 0.000
[2024-03-23 12:42:02][SCENARIO] | 173626 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 173627 jeedom localhost Sleep 0 0.000
[2024-03-23 12:42:02][SCENARIO] | 173628 jeedom localhost Query 0 starting 0.000 SHOW PROCESSLIST
[2024-03-23 12:42:02][SCENARIO] | 173629 jeedom localhost Sleep 0 0.000
Voilà, esperant que ca puisse me servir pour analyser le schmilblink
Norbert