シンプルなスプレーベースのサーブレットを使用しています。このサーブレットを Tomcat7 にデプロイして実行した後、サーブレット コンテナーを再起動せずにデプロイを解除します (そして、後で再度デプロイすることもできます) (したがって、基本的に JVM インスタンスは保持されます)。
問題は、各サーブレットのデプロイ時に Akka によって作成されたスレッドが、サーブレットがアンデプロイされたとき (つまり、Akka がシャットダウンしたとき) に破棄されず、デプロイごとに新しいスレッド セットが作成されることです。このように...漏れ。
呼んsystem.shutdown()
でsystem.awaitTermination()
も無駄。
サーブレットの初期化時に生成されたこれらのスレッドを強制終了する方法はありますか?
Tomcat7 のログ エントリの例を次に示します。
SEVERE: The web application [/...] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@68871741]) and a value of type [scala.concurrent.forkjoin.ForkJoinPool.Submitter] (value [scala.concurrent.forkjoin.ForkJoinPool$Submitter@155aa3ef]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Nov 14, 2013 1:53:24 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks