我有一个在Scalav2.11.4上编写的Play Frameworkv2.3.7的应用程序。它在服务器上运行,每周有一次崩溃,OutOfMemoryError除外:超过了GC开销限制。我在试着找出哪里出了问题。我做了内存转储和所有用过的类的直方图(我使用jmap -histo)。我发现了非常奇怪的结果
Object Histogram:
num #instances #bytes Class description
--------------------------------------------------------------------------
1: 24023 787570032 scala.concurrent.forkjoin.ForkJoinTask[]
2: 96965 12420368 * MethodKlass
3: 96965 11250824 * ConstMethodKlass
4: 8424 8652552 * ConstantPoolKlass
5: 8424 7547640 * InstanceKlassKlass
6: 61739 5531288 char[]
7: 7527 4799776 * ConstantPoolCacheKlass
8: 24024 4612608 scala.concurrent.forkjoin.ForkJoinPool$WorkQueue
9: 27289 3543672 byte[]
10: 23190 2597280 scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2
11: 63921 2045472 java.util.concurrent.ConcurrentHashMap$HashEntry
12: 3735 1470112 * MethodDataKlass
13: 42877 1029048 scala.collection.immutable.$colon$colon
14: 8834 1023064 java.lang.Class因此,有很多ForkJoinTask[]和ForkJoinPool$WorkQueue的实例。因此,我假设,它是队列和任务,我所有的异步调用和线程的应用程序。我还认为,从理论上讲,它们应该在完成后直接移除。
这一问题的可能原因是什么?也许我错配置了一个ExecutionContext?以前有没有人遇到过这个问题?
发布于 2015-12-02 13:01:52
这个问题通过使用最新版本的“”库(随后的版本为2.11.6)得到解决:
val scalaV = "2.11.6"
scalaVersion := scalaV
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-reflect" % scalaV
)https://stackoverflow.com/questions/27984398
复制相似问题