scala - Tomcat 7 随机崩溃并出现 ClassNotFoundException
问题描述
我有一个在 Tomcat7 中运行的 Scala 应用程序,该应用程序最近由于ClassNotFoundException
标准类的错误而开始随机崩溃,例如scala.collection.immutable.ListSet
即使服务器已经运行了一段时间。错误开始变得越来越频繁,现在我们每天在某些服务器上遇到几次崩溃
这是我们在 catalina.out 日志文件中获取的崩溃日志示例。
Dec 25, 2018 8:50:47 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Dec 25, 2018 8:50:47 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 6938 ms
Uncaught error from thread [TPDispatcher-akka.actor.default-dispatcher-4] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[TPDispatcher]
java.lang.NoClassDefFoundError: scala/collection/immutable/ListSet$
at scala.collection.immutable.HashSet$HashSet1.updated0(HashSet.scala:145)
at scala.collection.immutable.HashSet$HashTrieSet.updated0(HashSet.scala:227)
at scala.collection.immutable.HashSet$HashTrieSet.updated0(HashSet.scala:227)
at scala.collection.immutable.HashSet$HashTrieSet.updated0(HashSet.scala:227)
at scala.collection.immutable.HashSet$HashTrieSet.updated0(HashSet.scala:227)
at scala.collection.immutable.HashSet.$plus(HashSet.scala:56)
at scala.collection.immutable.HashSet.$plus(HashSet.scala:33)
at scala.collection.mutable.SetBuilder.$plus$eq(SetBuilder.scala:24)
at scala.collection.mutable.SetBuilder.$plus$eq(SetBuilder.scala:22)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.HashSet$HashSet1.foreach(HashSet.scala:153)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractSet.scala$collection$SetLike$$super$map(Set.scala:47)
at scala.collection.SetLike$class.map(SetLike.scala:93)
at scala.collection.AbstractSet.map(Set.scala:47)
at com.mycompany.lib.actors.BadgeUpdater.updateBadge(BadgeUpdater.scala:23)
at com.mycompany.lib.actors.BadgeUpdater$$anonfun$receive$1.applyOrElse(BadgeUpdater.scala:15)
at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
at com.twinpush.tp_dispatcher.lib.actors.BadgeUpdater.aroundReceive(BadgeUpdater.scala:11)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
at akka.actor.ActorCell.invoke(ActorCell.scala:487)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
at akka.dispatch.Mailbox.run(Mailbox.scala:220)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassNotFoundException: scala.collection.immutable.ListSet$
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1859)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1702)
... 33 more
Dec 26, 2018 2:15:31 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
Dec 26, 2018 2:15:31 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
我已经尝试重新编译几次,但没有运气。我不知道ClassNotFoundException
在已经运行的服务器上可能会导致什么,因此任何提示都将受到高度赞赏。
环境信息:
Scala version: 2.10.4
Server version: Apache Tomcat/7.0.68 (Ubuntu)
Server built: Oct 30 2018 12:54:52 UTC
Server number: 7.0.68.0
OS Name: Linux
OS Version: 4.4.0-141-generic
Architecture: amd64
JVM Version: 1.8.0_191-8u191-b12-0ubuntu0.16.04.1-b12
JVM Vendor: Oracle Corporation
解决方案
原来我有一个泄漏文件描述符的库,并且在某些时候 JVM 无法打开class
文件(这甚至可能吗?)。升级库修复了泄漏并且 JVM 停止崩溃。
推荐阅读
- snowflake-cloud-data-platform - 列出雪花中特定表中具有数据类型的所有列
- c++ - 从 std::vector 复制到推力::device_vector 时出现未处理的异常
- php - 在 WooCommerce 结帐中为特定产品类别制作所需的订单注释
- java - 从 int 数组创建对象数组
- ios - Xcode Objective-C 应用程序如何读取由 Visual Studio Xamarin.IOS 应用程序写入 MyDocuments 目录的文件?
- python - 删除没有元数据(标题、艺术家等)的目录中的特定 mp3 文件?
- python - 在每个步骤中迭代命令时更改日期时间变量?
- javascript - 为什么我的 for 循环不访问该对象内的数组?
- javascript - 如何在javascript中转义@或如何从包含@的字段中检索数据
- r - Bioconductor 封装开发 S3 与 S4