【问题标题】:Java heap space with MongoDBMongoDB 的 Java 堆空间
【发布时间】:2012-08-07 09:02:33
【问题描述】:

我使用 Tomcat、Eclipse、Java EE、MongoDB。

当我运行我的 java 程序以连接到 mongoDB 数据库并保存一些数据时,我收到此错误:

Exception in thread "http-bio-8080-exec-19"
java.lang.OutOfMemoryError: Java heap space
        at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:57)
        at java.nio.CharBuffer.allocate(CharBuffer.java:331)
        at com.mongodb.ByteEncoder.<init>(ByteEncoder.java:546)
        at com.mongodb.ByteEncoder.<init>(ByteEncoder.java:48)
        at com.mongodb.ByteEncoder$1.createNew(ByteEncoder.java:79)
        at com.mongodb.ByteEncoder$1.createNew(ByteEncoder.java:76)
        at com.mongodb.util.SimplePool._get(SimplePool.java:140)
        at com.mongodb.util.SimplePool.get(SimplePool.java:106)
        at com.mongodb.util.SimplePool.get(SimplePool.java:95)
        at com.mongodb.ByteEncoder.get(ByteEncoder.java:66)
        at com.mongodb.DBMessage.<init>(DBMessage.java:52)
        at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:166)
        at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:132)
        at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:127)
        at web.ApplicationInterface.doGet(ApplicationInterface.java:125)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110),

EDIT

我已经更改了Eclipse允许的内存,但我仍然有同样的问题。

这是导致问题的代码。

db.requestStart();
try 
{
    coll.insert(doc);
    DBObject err = db.getLastError();
} 
finally 
{
    db.requestDone();
}

PROBLEM SOLVED

MongoDB的版本老了,bug多,我现在用的是2.8的,现在可以用了,谢谢

【问题讨论】:

  • 您使用的是 Tomcat、Java、MongoDB 的哪个版本?
  • 我正在使用 Java 6、mongodb 2.0.6 和 Apache TomEE 1.0.0
  • 'Eclipse 允许'是什么意思?您是否在运行配置中添加了内存设置 > 参数
  • doc 是什么?在try中添加第一行,System.out.println(doc);
  • @Tito George :我的意思是分配(不允许)

标签: java eclipse jakarta-ee tomcat mongodb


【解决方案1】:

尝试增加堆大小

JVM -- keys
 -Xms<size>        set initial Java heap size
 -Xmx<size>        set maximum Java heap size

【讨论】:

    【解决方案2】:

    尝试为您的 JVM 留出更多内存,使用 -Xmx1024m 选项(例如):How to deal with "java.lang.OutOfMemoryError: Java heap space" error (64MB heap size)

    【讨论】:

      【解决方案3】:

      您要保存多少数据? 我认为您正在尝试将大量数据一次性存储到 MongoDB。

      【讨论】:

      • 要保存的数据不多,只有 10 行
      【解决方案4】:

      在运行配置中编辑这些 对于运行配置 右键单击您的项目根目录--> 运行方式--> 运行配置

      【讨论】:

        猜你喜欢
        • 2021-09-09
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 2017-12-19
        • 2011-10-24
        • 1970-01-01
        相关资源
        最近更新 更多