2016-06-30 8 views
0

So ist das Szenario, dass ich mehrere Anwendung in einem einzigen Tomcat habe, und hin und wieder muss ich sie aktualisieren, ohne den Dienst neu zu starten.Liste der Threads einer bestimmten Anwendung auf Tomcat

Um einige Lecks zu vermeiden (vermutlich von Klassen erzeugt, die ich nicht habe [dh TimerThread, das niemals endet]), wenn ich Anwendungen auf Tomcat 7 neu lade oder neu einlege, habe ich beschlossen, die Threads aufzulisten, wenn der Kontext zerstört wird und stoppen/unterbrechen sie mit Gewalt. Ich weiß, dass es nicht wie ein perfekter Ansatz klingt, aber es scheint der, der funktioniert, denn ich konnte keinen Punkt finden, den ich den Thread schön schließen könnte. Daher bleibe ich bei der Erzeugung dieser Lecks.

Ich habe sie mit "Thread.getAllStackTraces()" aufgelistet, aber es gibt mir anscheinend alle Threads in der JVM, und ich wollte nur die Threads einer bestimmten Anwendung, so dass ich in der Lage wäre, über sie zu iterieren finde die eine (n), die ich unterbrechen muss. Ich habe "getName()" verwendet, um sie zu finden.

Nun, wenn jemand kann mich auf diesem klärt ...

Java 7 Tomcat 7

+0

kann Kill -3 ProcessId im Terminal verwenden, wird die Thread-Stack-Ablaufverfolgung in der Protokolldatei ausgeben. – Jango

+0

eigentlich muss ich sie innerhalb des Java-Codes finden. So kann ich sie unterbrechen, wenn die Anwendung heruntergefahren wird. – LucasJohn

+1

Ich weiß, dass dies nicht die Frage ist, die du stellst, aber wenn ich du wäre, würde ich lieber eine dedizierte Tomcat-Instanz für jede Webapp ausführen. Tomcat ist so leicht, es würde kein Performance-Problem aufkommen, und Sie könnten dann jede Webanwendung nach Belieben töten oder erneut bereitstellen, ohne die anderen zu beeinträchtigen. Außerdem können Sie die JVM-Speichereinstellungen pro Anwendung und nicht global anpassen. –

Antwort

0

Als erstes habe ich die Jungs bedanken, die oben auf meinem Zweifel kommentiert.

Wie auch immer ... Ich hielt nach einer Antwort Ausschau und konnte die Threads nicht auflisten, da ich dachte, es wäre der beste Weg, um das Problem zu lösen. Dann entschied ich mich, woanders hinüber zu schauen, über die Bibliotheken und stellte fest, dass eine von ihnen, apache.commons.dbcp, Version 1.4 für Java 6 bestimmt war, und als ich Java 7 benutzte, erschafft es mysteriös einen TimerThread, der niemals endet. daher ein Leck verursachen. Die Aktualisierung auf apache.commons.dbcp2 für Java 7+ hat dazu geführt, dass die Anwendung dieses von mir erwähnte TimerThread nicht einmal gestartet hat. Es sieht jetzt gut aus.

Verwandte Themen