Forum général.général Process fautif

Posté par .
Tags : aucun
1
17
fév.
2011
Bonjour,

Je voudrais récupérer les infos lors d'une montée en charge d'un serveur :
- le nom de l'appli responsable
- son pid
- l'heure


Mais uniquement quand il y a une activité au delà d'un certain seuil de CPU, disque, mémoire.
Je veux juste monitorer "rapidement" sans avoir besoin de mettre en place un Nagios, ou équivalent.

Existe-il un moyen de récupérer ces infos sans avoir besoin de scripter un truc trop long ?
Le package sysstat, avec sar et mpstat permettent pas de chose.

Je veux juste avoir le "nom" de l'appli coupable ?

Merci d'avance de vos retours.
  • # script simple

    Posté par (page perso) . Évalué à 3.

    A mon avis un truc genre

    uptime pour avoir la charge.
    si la charge est plus grande que SEUIL
    alors
    loop 10 fois
    1/ top > stats pour voir qui tourne
    2/ un coup de perl sur ce fichier stats pour stocker l'utilisation mémoire/CPU de chaque PID dans un hash (en additionant à la valeur précédente)
    fin loop
    divise les valeurs de ta table de hash par 10 pour choper la moyenne
    retourne le PID qui a la plus grosse.
    fin si
    • [^] # Re: script simple

      Posté par (page perso) . Évalué à 1.

      Très bonne idée de partir sur uptime, après

      Le plus de CPU :

      ps xua | sort -n -k3 | tail -3

      Le plus de Mémoire :

      ps xua | sort -n -k4 | tail -3

      (bizarre d'ailleurs le "ps --sort %cpu uax" fonctionne mais pas le "ps --sort %mem uax",
      un bug ???)
      • [^] # Re: script simple

        Posté par . Évalué à 1.

        Très bonne idée de partir sur uptime

        Ok si tu veux effectivement agir en fontion de la moyenne du CPU moyennée sur les dernières 1/5/15 minutes. Si tu as besoin de plus de granularité, tu peux partir su vmstat. Genre sur ma machine, pour faire un check toutes les secondes et ne néclancher l'outil de diagnostic que si le CPU est > 10% du total (à adapter selon la machine, ou regarder les indexes des champs en début de script pour les mapper dynamiquement dans le awk) :

        > seuil=10; vmstat 1 | awk '/^[^a-z]*$/ {print $13 + $14; fflush ();}' | while read cpu; do case `expr $cpu \< $seuil` in 0) echo "`date` pOwned";; esac; done

        Si par contre tu veux faire ça en fonction d'1 nombre restreint de processus, alors tu peux utiliser `top -n 1' et grepper sur les lignes qui t'interressent.

        Et attention au machines multicoeurs: avec 4 coeurs, 1 process à fond sur 1 coeur prend 25% de CPU.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.