GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Protokoll vergangener Threads, die jetzt geschlossen sind?

Manchmal habe ich einen bösartigen Java-Prozess, der 100 % meiner CPU beansprucht und die Temperatur um etwa 30 °C ansteigen lässt (was normalerweise zu einem Absturz führt, wenn er nicht beendet wird).

Das Problem ist, dass ich es nie wirklich identifizieren (es hat eine lange Liste von Parametern und so) oder analysieren kann, weil ich es so schnell töten muss.

Gibt es eine Art Protokoll, das ich mir ansehen kann, um die Identität vergangener Prozesse zu sehen, die ich beendet habe? Wenn nicht, gibt es eine Möglichkeit für mich, diesen Prozess das nächste Mal abzufangen, wenn er auftaucht?

Wenn es darauf ankommt, ich bin OpenSuse 11.4.

Akzeptierte Antwort:

Nein, standardmäßig nicht. Es gibt so etwas wie zu viel Protokollierung (insbesondere wenn Sie riskieren, die Aktion des Schreibens eines Protokolleintrags zu protokollieren …).

BSD-Prozessabrechnung (falls vorhanden, führen Sie lastcomm aus ), wenn aktiv, zeichnet den Namen jedes ausgeführten Befehls und einige grundlegende Statistiken auf, aber nicht die Argumente.

Das Audit-Subsystem ist allgemeiner und flexibler. Installieren Sie das audit Paket und lesen Sie den SuSE Audit Guide (hauptsächlich den Teil über Regeln), oder versuchen Sie es

auditctl -A exit,always -F path=/usr/bin/java -S execve

Oder:Anstatt es zu beenden, kill -STOP es. Der STOP unterbricht den Vorgang, es werden keine Fragen gestellt. Sie erhalten die Option zum Fortsetzen (kill -CONT ) oder beenden (kill -KILL ) später. Solange der Prozess noch läuft, können Sie seine Befehlszeile (/proc/12345/cmdline ), seine Speicherkarte (/proc/12345/maps ) und so weiter.

Oder:Hängen Sie einen Debugger an den Prozess an und halten Sie ihn an. Es ist so einfach wie gdb --pid 12345 (Möglicherweise gibt es bessere Optionen für einen Java-Prozess); Durch das Anhängen eines Debuggers wird der Prozess sofort angehalten (wenn Sie den Debugger beenden, erhält der Prozess ein SIGCONT und wird fortgesetzt).

Beachten Sie, dass all dies nur Prozesse auf Betriebssystemebene erfasst, keine JVM-Threads. Sie müssen sich den JVM-Funktionen zuwenden, um Threads zu debuggen.


Linux
  1. Linux – Wann sollte ich keinen -9 A-Prozess beenden?

  2. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  3. Einführung in Linux-Threads – Teil I

  4. So stoppen Sie manuell ein Python-Skript, das unter Linux kontinuierlich ausgeführt wird

  5. Sind Linux-Kernel-Threads wirklich Kernel-Prozesse?

Wie beendet man einen Prozess in Linux? Befehle zum Beenden

So beenden Sie einen Prozess in Linux

Kill-Befehl unter Linux

So beenden Sie Zombie-Prozesse in Linux

5 schnelle Möglichkeiten, einen Prozess in Linux zu beenden

Wie man einen Prozess unter Linux beendet