Diagnostics Serveurs Linux – TroubleShooting

I► Linux dispose de nombreux outils disponibles pour essayer de comprendre pourquoi le serveur ralentit, semble bloqué sur certaines transactions …

La commande top ou htop indiquera quel process sont les plus gourmands en cpu et en utilisation mémoire.

Capture

wa indique le i/o waiting, il faut donc le surveiller avec précision …

On va télécharger le script de stress sur http://www.bocciolesi.fr/linux-tools/  Ce script permet de stresser soit la cpu, les I/O , etc …
Exemple : stress –io 1000 ou stress –cpu 10

Et ensuite éxecuter la commande iostat pour identifier quel device est en cause …
iostat -x ( rapport détaillé) 2 (refresh toutes les 2 secondes) 5 (5 tests en tout)
Ne tenez pas compte du 1er résultat …
iostat indique le % d’occupation des I/O par device mais bien plus encore :
Des éléments également tels que lecture et écriture des requêtes par millisecondes (rrqm / s et wrqm / s), lecture et écriture par seconde (r / s & w / s)

Capture

Mais pour avoir encore plus de détail sur les processus qui pénalisent les I/O, on va installer IoTop
yum install iotop ou apt-get install iotop :

Capture

TID est le THREAD ID, le kernel ne fait pas de différences entre le PID et le TID …

Les processus qui sont en attente d’I/O sont souvent dans un état de «sommeil sans interruption” ou D.

PROCESS STATE CODES
 D uninterruptible sleep (usually IO)
 R running or runnable (on run queue)
 S interruptible sleep (waiting for an event to complete)
 T stopped, either by a job control signal or because it is being traced.
 W paging (not valid since the 2.6.xx kernel)
 X dead (should never be seen)
 Z defunct ("zombie") process, terminated but not reaped by its parent.

Voilà une petite méthode 🙂 qui permet de les identifier :

Capture

Après avoir identifié le processus I/O qui ralentit le système, on peut :

  • Observer ses accès lecture et écriture avec un cat /proc/31114/io 

Capture

  • le renicer grâce à ionice :

ionice récupère ou met à jour la priorité d’une transaction I/O

ionice -c (class : 0 rien – 1 real time – 2 best effort et 3 idle) -p (pid) 31114

  • Voir tous les fichiers ouverts à cause de ce processus avec lsof -p 31114

Capture

  • le stopper (pauser) avec un kill -18 31114 et le redémarrer plus tar avec un kill -19 31114 …

 

TP :

Capture

 

————————————————————————————————————————————-

Limiter le nombre de processus créés avec ULIMIT et PAM :

Un exemple de FORK BOMB :

forkBomb

C’est la fonction 2 point  qui entre accolades éxécute la fonction 2 point ou bien 2 points en job.
Le point virgule termine la 1ère commande et on appelle la fonction 2 points une 1ère fois.

PAM gère tout ce qui concerne la sécurité par le fichier de configuration : /etc/security/limits.conf. Pour rappel, les share objects de Pam sont sous /lib64/security et les fichiers qui contiennent les règles sous /etc/pam.d
Ce fichier définit des limites soft et hard en définissant :

 

  • un domain : user (tux) | groupe (@linux) | * (tout le monde)
  • un type de limite : soft ou hard
  • un item : data | maxlogins | nproc (nombre max de process) | fsize etc ..
  • la valeur

Exemple :

Capture

  • Les limites soft peuvent être dépassées.
  • Les limites hard sont les limites que l’on ne pourra pas dépasser …

► ULIMIT modifie ces directives également mais cela reste temporaire le temps de la session

►ulimit -u 10 limitera à 10 le nombre de processus lancés par un utilisateur
On pourra vérifier cet indicateur avec ulimit -u ou ulimit -a