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
kann Kill -3 ProcessId im Terminal verwenden, wird die Thread-Stack-Ablaufverfolgung in der Protokolldatei ausgeben. – Jango
eigentlich muss ich sie innerhalb des Java-Codes finden. So kann ich sie unterbrechen, wenn die Anwendung heruntergefahren wird. – LucasJohn
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. –