我在Tomcat webApp中使用喷雾客户端即akka。
虽然我通过spring在tomcat关闭时正确地破坏了actor系统,但我仍然面临着这个线程问题。
我发现这个问题已在几年前报告Tomcat complaints when re-deploying servlet with akka inside,但找不到解决方案
我使用默认的喷涂客户端配置。
这是我停止tomcat时得到的错误。 (对不起,我尽量提供尽可能多的线索信息)
2015年6月10日12:54:22.516警告[localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎已启动一个名为的线程 [PoolPartyConnector-ActorSystem-scheduler-1]但未能停止 它。这很可能造成内存泄漏。
堆栈跟踪 thread:java.lang.Thread.sleep(Native方法) akka.actor.LightArrayRevolverScheduler.waitNanos(Scheduler.scala:226) akka.actor.LightArrayRevolverScheduler $$匿名$ 8.nextTick(Scheduler.scala:405) akka.actor.LightArrayRevolverScheduler $$匿名$ 8.run(Scheduler.scala:375) java.lang.Thread.run(Thread.java:745)
2015年6月10日12:54:22.516警告 [本地主机 - startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎已启动一个名为的线程 [PoolPartyConnector-ActorSystem-akka.actor.default-dispatcher-2]但是 未能阻止它。这很可能造成内存泄漏。 堆栈线程的痕迹:sun.misc.Unsafe.park(本机方法) scala.concurrent.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075) scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
2015年6月10日12:54:22.516警告[localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎已启动一个名为的线程 [PoolPartyConnector-ActorSystem-akka.actor.default-dispatcher-3]但是 未能阻止它。这很可能造成内存泄漏。 堆栈跟踪线程: akka.actor.dungeon.DeathWatch $ class.watchingContains(DeathWatch.scala:73) akka.actor.dungeon.DeathWatch $ class.watchedActorTerminated(DeathWatch.scala:54) akka.actor.ActorCell.watchedActorTerminated(ActorCell.scala:369) akka.actor.ActorCell.invokeAll $ 1(ActorCell.scala:455) akka.actor.ActorCell.systemInvoke(ActorCell.scala:478) akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:263) akka.dispatch.Mailbox.processMailbox(Mailbox.scala:241) akka.dispatch.Mailbox.run(Mailbox.scala:220) akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339) scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
2015年6月10日12:54:22.517警告[localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎已启动一个名为的线程 [PoolPartyConnector-ActorSystem-akka.actor.default-dispatcher-4]但是 未能阻止它。这很可能造成内存泄漏。 堆栈线程的痕迹:sun.misc.Unsafe.park(本机方法) scala.concurrent.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075) scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
跟踪的另一部分说:
2015年6月10日12:54:22.571严重[localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks Web应用程序[oai]使用类型的键创建了一个ThreadLocal [java.lang.ThreadLocal](value [java.lang.ThreadLocal@14483049])和一个 类型的值[scala.concurrent.forkjoin.ForkJoinPool.Submitter] (值[scala.concurrent.forkjoin.ForkJoinPool$Submitter@752622d4]) 但是在Web应用程序停止时无法将其删除。主题 随着时间的推移会更新,以避免可能的记忆 泄漏。
2015年6月10日12:54:22.571严重[localhost-startStop-1]
org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks Web应用程序[oai]使用类型的键创建了一个ThreadLocal [scala.concurrent.forkjoin.ThreadLocalRandom $ 1](价值 [scala.concurrent.forkjoin.ThreadLocalRandom$1@20399e41])和一个值 类型为[scala.concurrent.forkjoin.ThreadLocalRandom](值 [scala.concurrent.forkjoin.ThreadLocalRandom@1286565])但未能 Web应用程序停止时将其删除。线程即将发生 随着时间的推移需要更新以避免可能的内存泄漏。
2015年6月10日12:54:22.571严重[localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks Web应用程序[oai]使用类型的键创建了一个ThreadLocal [scala.util.DynamicVariable $$ anon $ 1](价值 [scala.util.DynamicVariable$$anon$1@64b67887])和类型的值 [org.apache.tomcat.util.log.SystemLogHandler](值 [org.apache.tomcat.util.log.SystemLogHandler@523e426f])但未能 Web应用程序停止时将其删除。线程即将发生 随着时间的推移需要更新以避免可能的内存泄漏。
2015年6月10日12:54:22.571严重[localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks Web应用程序[oai]使用类型的键创建了一个ThreadLocal [java.lang.ThreadLocal](value [java.lang.ThreadLocal@14483049])和一个 类型的值[scala.concurrent.forkjoin.ForkJoinPool.Submitter] (值[scala.concurrent.forkjoin.ForkJoinPool$Submitter@20c2d647]) 但是在Web应用程序停止时无法将其删除。主题 随着时间的推移会更新,以避免可能的记忆 泄漏。
最后到最后我得到以下
10-Jun-2015 12:54:22.574 INFO [PoolPartyConnector-ActorSystem-akka.actor.default-dispatcher-2] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading非法访问:此Web应用程序实例已停止已经。无法加载[scala.util.control.NonFatal $]。抛出以下堆栈跟踪以进行调试以及尝试终止导致非法访问的线程。 java.lang.IllegalStateException:非法访问:此Web应用程序实例已经停止。无法加载[scala.util.control.NonFatal $]。抛出以下堆栈跟踪以进行调试以及尝试终止导致非法访问的线程。 在org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1327) 在org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1313) 在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1196) 在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) at akka.actor.ActorSystemImpl $$ anon $ 2.uncaughtException(ActorSystem.scala:511) at akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher.scala:405) 在scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339) 在scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
PS:
这导致我的Intellij出现问题。确实,我仍然可以从终端tomcat开始和停止。但是,从Intellij中我在重启时得到以下内容:
错误:代理抛出异常:java.rmi.server.ExportException:端口已在使用中:1099;嵌套异常是: java.net.BindException:已在使用的地址
我必须每次从intellij中重启1099时终止进程。