Forum Programmation.shell Tuer automatiquement un process qui prend trop de mémoire

Posté par .
Tags : aucun
1
20
mai
2009
Cher Forum,

Le long week-end arrivant, je prévoit de faire mouliner gros truc tout le week-end
Programme, le script appelle un programme pleins de fuite de mémoire,
Comme je ne veux pas retrouver le programme à genou, je cherche un moyen pour tuer le process si il consomme plus de 50% de la mémoire totale.
Le tout de préférence sans tuer tout le script mais juste le programme (pour qu'a l'itération suivante ça fonctionne.)
Je n'ai pas d'accès root sur sur la dite machine,

Pour préciser la structure de mon script est la suivante

while i...
do
sed/awk/ls # pour écrire la liste de fichier a mouliner
./moulinette
#sauvegarde des fichiers de sorties (mv)
i+1
done

J'aimerais mettre un test de la conso de mémoire de ./moulinette
débouchant sur un kill si [mémoire utilisée]> 50%
Pour l'instant j'utilise /bin/sh
j'aimerais éviter de convertir tout mon script en en shell compliqué
  • # très sale

    Posté par . Évalué à 3.


    while 1
    do
    ps u | gawk '{ if ($4 >= "50") print "kill -9 "$2}' | sh
    sleep 1
    done


    à adapter suivant :
    - l'OS (la commande ps est différente sur Solaris, AIX etc...)
    - afin que seul le programme désiré soit surveillé (ici n'importe quel programme > 50% de mem est tué)
    - la tempo entre chaque vérif (ici une seconde)
    • [^] # Re: très sale

      Posté par . Évalué à 2.

      C'est peut être Sale mais c'est de loin le plus simple de ce qui est proposé en dessous (encore qu'il faut que je regarde un peu plus ulimit)
      Juste une petite erreur à corrigé dans ton script
      [code]
      ps u | gawk '{ if ($4 >= 50) print "kill -9 "$2}' | sh
      [/code]
      Sinon avec les " ça checke la différence entre deux chaines (longueurs ?) et ça tue de façon aléatoire.

      Merci
  • # ulimit

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

    ulimit permet de donner des limites de ressources aux programmes.
    Dans ce cas, probablement les options -v et -s non ?
  • # Cgroup

    Posté par . Évalué à 3.

    la solution n est pas tué le(s) process(us)
    Mais de prévoir une configuration système pour le(s) contraindre.

    Cgroup est ton ami.
  • # cpuset

    Posté par . Évalué à 1.

    Il y a aussi l'option du noyau cpuset, qui permet de limiter un certain nombre de taks (pid) a utiliser certains coeurs/processeurs et certaines parties de la memoire.
    Pour que la gestion de la memoire fonctionne, il est nécessaire d'avoir une architecture NUMA.
    Pour ceux qui ne beneficie pas de l'architecture NUMA, il suffit d'activer l'option noyau NUMA_EMU, ou numa fake.

    =)

Suivre le flux des commentaires

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