java.lang.OutOfMemoryError在Play

时间:2018-03-11 17:14:58

标签: scala playframework playframework-2.0 hsqldb playframework-2.5

我在Play for Scala应用服务器中使用HSQLDB嵌入式内存。

我像这样配置驱动程序:

   driver = org.hsqldb.jdbc.JDBCDriver
   url = "jdbc:hsqldb:mem:inmemory"

此外,当Play重新启动时,我会在SHUTDOWN连接中发出HSQLDB声明。

这似乎工作正常,但是当我在开发环境中重启Play大约20次时,我得到以下内存不足异常。 HDBSQL是否正确关闭?也许数据库已关闭,但引擎内存本身未发布?

  

java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:   元空间           at java.util.concurrent.FutureTask.report(FutureTask.java:122)           at java.util.concurrent.FutureTask.get(FutureTask.java:192)引起:java.lang.OutOfMemoryError:Metaspace           at java.lang.ClassLoader.defineClass1(Native Method)           at java.lang.ClassLoader.defineClass(ClassLoader.java:763)           at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)           at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)           在java.net.URLClassLoader.access $ 100(URLClassLoader.java:73)           在java.net.URLClassLoader $ 1.run(URLClassLoader.java:368)           在java.net.URLClassLoader $ 1.run(URLClassLoader.java:362)           at java.security.AccessController.doPrivileged(Native Method)           at java.net.URLClassLoader.findClass(URLClassLoader.java:361)           at java.lang.ClassLoader.loadClass(ClassLoader.java:424)           at java.lang.ClassLoader.loadClass(ClassLoader.java:357)           at java.lang.ClassLoader.defineClass1(Native Method)           at java.lang.ClassLoader.defineClass(ClassLoader.java:763)           at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)           at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)           在java.net.URLClassLoader.access $ 100(URLClassLoader.java:73)           在java.net.URLClassLoader $ 1.run(URLClassLoader.java:368)           在java.net.URLClassLoader $ 1.run(URLClassLoader.java:362)           at java.security.AccessController.doPrivileged(Native Method)           at java.net.URLClassLoader.findClass(URLClassLoader.java:361)           at java.lang.ClassLoader.loadClass(ClassLoader.java:424)           at java.lang.ClassLoader.loadClass(ClassLoader.java:357)           在scala.collection.Iterator $ class.toStream(Iterator.scala:1181)           在scala.collection.AbstractIterator.toStream(Iterator.scala:1194)           在scala.collection.TraversableOnce $ class.toSeq(TraversableOnce.scala:296)           在scala.collection.AbstractIterator.toSeq(Iterator.scala:1194)           在scala.tools.nsc.backend.jvm.GenASM $ newNormal $ .computeDetour $ 1(GenASM.scala:3094)           在scala.tools.nsc.backend.jvm.GenASM $ newNormal $ .collapseJumpOnlyBlocks(GenASM.scala:3126)           在scala.tools.nsc.backend.jvm.GenASM $ newNormal $ .normalize(GenASM.scala:3195)           在scala.tools.nsc.backend.jvm.GenASM $ JPlainBuilder.genCode(GenASM.scala:1861)           在scala.tools.nsc.backend.jvm.GenASM $ JPlainBuilder.genMethod(GenASM.scala:1467)           在scala.tools.nsc.backend.jvm.GenASM $ JPlainBuilder.genClass(GenASM.scala:1337)

1 个答案:

答案 0 :(得分:0)

HSQLDB有一种在最后一个连接关闭时自动关闭数据库的方法。您需要添加shutdown=true作为网址属性:

url = "jdbc:hsqldb:mem:inmemory;shutdown=true"

在文档中查看更多详细信息:

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#N15641