Tomcat中的Spray Client(即AKKA)导致线程问题

时间:2015-06-10 17:07:01

标签: java scala tomcat akka spray

我在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时终止进程。

0 个答案:

没有答案