2016-06-30 4 views
0

したがって、私は単一のTomcatに複数のアプリケーションがあり、しばらくしてサービスを再起動せずにそれらを更新する必要があります。tomcat上の特定のアプリケーションのスレッドリスト

Tomcat 7でアプリケーションをリロードしたり再デプロイしたときに(つまり、決して終わらないTimerThreadにアクセスできないクラスによって生成された)リークを防ぐために、私はコンテキストを破棄するときにスレッドをリストすることにしました力でそれらを停止/中断する。 私はそれが完璧なアプローチのようには聞こえないことを知っていますが、それはうまくスレッドを閉じることができた点を見つけることができなかったので、動作しているようです。したがって、私はこれらのリークを発生させることに固執しています。

「Thread.getAllStackTraces()」と表示されていますが、明らかにJVM内のすべてのスレッドが表示されます。特定のアプリケーションのスレッドが必要なので、それらを繰り返し処理できます私が中断しなければならないものを見つけてください。 "getName()"を使用して検索しました。まあ

、誰もがこの上で私を明確にすることができれば...

のJava 7 のTomcat 7

+0

は、ターミナルでkill -3 processIdを使用でき、スレッドスタックトレースをログファイルにダンプします。 – Jango

+0

実際に私はそれらをJavaコード内で見つける必要があります。だから私は、アプリケーションがシャットダウンしているときにそれらを中断することができます。 – LucasJohn

+1

これはあなたが求めている質問ではないことは分かっていますが、私の場合は、Webappごとに専用のTomcatインスタンスを実行したいと思います。 Tomcatは軽量なので、パフォーマンス上の問題は発生せず、他のWebアプリケーションに影響を与えることなく任意のWebアプリケーションを強制的に削除または再デプロイできます。また、グローバルではなく、アプリケーションごとにJVMメモリ設定を微調整することもできます。 –

答えて

0

私は上記の私の疑問についてコメントみんなに感謝したいと思いますまず第一に。

とにかく...私は答えを探し続けていて、問題を解決するための最良の方法だと思ったので、スレッドをリストできませんでした。そして、図書館のどこかを見渡し、apache.commons.dbcpバージョン1.4がJava 6向けになっていることがわかりました。また、Java 7を使用していたときには、決して終わらないTimerThreadを作成しました。漏れが生じます。 Java 7 +用のapache.commons.dbcp2に更新すると、アプリケーションは私が言及したこのTimerThreadを起動することさえできませんでした。 それは今よく見えます。

関連する問題