9 votes

Comment tuer automatiquement les processus qui laissent fuir la mémoire ?

J'ai des problèmes avec les processus qui fuient la mémoire. Ils font en sorte que mon disque dur soit rempli de fichiers swap en /private/var/vm .

Je voudrais que les processus qui fuient soient tués à vue par le système d'exploitation. . Je ne suis pas intéressé par une boîte de dialogue qui apparaît après 20 minutes, qui suggère des applications à supprimer et qui ne montre même pas celle qui fuit.

J'ai essayé de régler le rss y data limites dans /etc/launchd.conf mais ça ne semblait pas avoir d'effet.

C'est mon /etc/launchd.conf :

limit data 8589934592 8589934592
limit rss 8589934592 8589934592

Voici le launchctl limit sortie :

% launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        8589934592     8589934592
    stack       8388608        67104768
    core        0              unlimited
    rss         8589934592     8589934592
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    256            unlimited

C'est mon .zshrc :

ulimit -t 600
ulimit -d 512000
ulimit -v 1024000

Et le ulimit -a sortie (en ZSH) :

% ulimit -a
    -t: cpu time (seconds)         600
    -f: file size (blocks)         unlimited
    -d: data seg size (kbytes)     512000
    -s: stack size (kbytes)        8192
    -c: core file size (blocks)    0
    -v: address space (kb)         1000
    -l: locked-in-memory size (kb) unlimited
    -u: processes                  709
    -n: file descriptors           256

Pourtant, voici ce que top me parle du processus :

PID  COMMAND      %CPU  TIME     #TH  #WQ  #POR #MRE RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP PPID
886  process      30.8  01:16.40 1/1  0    17   332  2259M+ 184K   2072M- 19G+   38G    882  885

Il semble simplement qu'aucune des méthodes de limitation de la mémoire documentées ne fonctionne réellement. Existe-t-il un mécanisme supplémentaire qui m'aurait échappé ?

3voto

Huygens Points 1563

Je créerais un simple script qui filtrerait tout processus dont la taille de la mémoire résidente (ou peut-être la taille totale de la vm, donc incluant toutes les pages paginées) est supérieure à un seuil que je définis (en fonction de la quantité de processus, de la mémoire totale disponible et peut-être aussi de la disponibilité du CPU). On peut utiliser un peu de bash script avec soit top o ps pour extraire la liste des processus et la taille de la mémoire.

À partir de cette liste filtrée, j'utiliserais la fonction leaks (voir fuites de l'homme 1 ) par PID de processus. Si la quantité totale de mémoire perdue rapportée par la commande est supérieure à un autre seuil, je la tue et la relance.

NOTE : Vous devez veiller à ne pas tuer de processus OS/Système sans savoir ce que vous faites. Pour éviter cette situation, vous devriez peut-être filtrer la liste en utilisant une approche de "liste blanche".

1voto

Eric Wilson Points 134

Ulimit sur la plupart des plateformes ne fonctionne pas comme prévu.

S'il ne s'agit pas d'une application de bureau, exécutez le délinquant avec un superviseur de processus approprié tel que https://github.com/arya/bluepill

S'il s'agit d'une application de bureau, contactez les développeurs de l'application. Le retour d'information est nécessaire et important.

L'interface utilisateur de l'OOM killer GUI pour Mac est horrible. Il devrait être trié par ordre décroissant avec un graphique à barres proportionnel pour l'utilisation de la RAM de chaque processus. De plus, il devrait automatiquement SIGCONT tous les processus en pause lorsqu'il est résolu.

-2voto

Comptrol Points 4415

Si vous en avez besoin pour les redémarrages, vous devez utiliser seulement launchctl limit commandement.

Si vous devez limiter la mémoire de l'application, vous devez également limiter le segment de pile.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X