2016-04-25 5 views
2

Ich möchte automatisch einen Thread-Dump als Teil eines Protokolls Sammlung erstellen, die ich geschrieben habe.Install4j: Ist es möglich, einen Install4j Launcher zu konfigurieren, um auf Kill -3 zu antworten und einen Thread Dump zu generieren?

Ich weiß, dass es möglich ist, einen Thread-Dump mit jstack oder kill -3 zu erzeugen. Der Kunde, der das Protokollauflistungsskript ausführt, hat nur eine JRE installiert, so dass Jstack keine Option ist.

Wenn ich Jstack und die PID der JVM verwenden, die der Install4j-Launcher erstellt, bekomme ich den Thread-Dump ... aber Aufruf von Kill -3 mit der gleichen PID erzeugt keine Ausgabe. Ich leite gerade stderror und stdout zu den Dateien, die die install4j Launcherkonfiguration verwenden.

Dies ist ein Linux-Startprogramm, das mit der Serviceoption konfiguriert ist.

FWIW ... habe ich versucht, die Ausgabe nicht lenken und auch meine Anwendung als Konsolenprogramm anstelle einen Dienst und keiner von ihnen laufen lassen ‚töten -3‘ zu arbeiten.

Ich install4j 6.0

Schließlich verwenden, möchte ich nicht -XX verwenden: + UnlockDiagnosticVMOptions -XX: + LogVMOutput -XX: Logfile = dump.log wegen der unbekannten Kopf es schaffen könnte.

Jede Hilfe wäre willkommen!

Antwort

1

Ich würde vorschlagen, die ThreadMXBean zu verwenden, um diese Informationen programmgesteuert in demselben Prozess zu erhalten, anstatt Signalhandler aus einem anderen Prozess zu verwenden. Die API-Dokumentation ist bei

http://docs.oracle.com/javase/8/docs/api/java/lang/management/ThreadMXBean.html

Here's a full example, wie diese MBean zu verwenden.

Auf diese Weise können Sie die Informationen explizit dorthin schreiben, wo Sie möchten.

+0

Das von Ihnen gepostete Beispiel kombiniert mit einem Signalhandler löste mein Problem. Vielen Dank! – Hanns

Verwandte Themen