Parfois, j'ai un processus Java malveillant qui occupe 100 % de mon processeur et le fait sauter d'environ 30 °C en température (entraînant généralement un plantage s'il n'est pas tué).
Le problème est que je ne peux jamais vraiment l'identifier (il a une longue liste de paramètres et d'autres choses) ou l'analyser parce que je dois le tuer si rapidement.
Existe-t-il une sorte de journal que je peux consulter pour voir l'identité des processus passés que j'ai tués? Si ce n'est pas le cas, y a-t-il un moyen pour moi d'attraper ce processus la prochaine fois qu'il s'affichera ?
Si c'est important, je suis OpenSuse 11.4.
Réponse acceptée :
Non, pas par défaut. Il y a trop de journalisation (surtout lorsque vous commencez à risquer de journaliser l'action d'écrire une entrée de journal…).
Comptabilisation des processus BSD (si vous l'avez, exécutez lastcomm
), s'il est actif, enregistre le nom de chaque commande exécutée et quelques statistiques de base, mais pas les arguments.
Le sous-système d'audit est plus général et plus souple. Installez l'audit
package et lisez le guide d'audit SuSE (principalement la partie sur les règles), ou essayez
auditctl -A exit,always -F path=/usr/bin/java -S execve
Ou :au lieu de le tuer, kill -STOP
ce. Le STOP suspend le processus, sans poser de questions. Vous avez la possibilité de reprendre (kill -CONT
) ou terminer (kill -KILL
) plus tard. Tant que le processus est toujours là, vous pouvez inspecter sa ligne de commande (/proc/12345/cmdline
), sa carte mémoire (/proc/12345/maps
) et ainsi de suite.
Ou :attachez un débogueur au processus et mettez-le en pause. C'est aussi simple que gdb --pid 12345
(il peut y avoir de meilleures options pour un processus Java); attacher un débogueur met immédiatement le processus en pause (si vous quittez le débogueur, le processus reçoit un SIGCONT et reprend).
Notez que tout cela n'intercepte que les processus au niveau du système d'exploitation, pas les threads JVM. Vous devez vous tourner vers les fonctionnalités JVM pour déboguer les threads.