3

Tomcat、Eclipse、Java EE、MongoDB を使用しています。

mongoDB データベースに接続してデータを保存する Java プログラムを実行すると、次のエラーが発生します。

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 のバージョンは古く、バグだらけでした。現在、バージョン 2.8 を使用しています。動作しています。ありがとうございます。

4

4 に答える 4

3

ヒープサイズを増やしてみてください

JVM -- keys
 -Xms<size>        set initial Java heap size
 -Xmx<size>        set maximum Java heap size
于 2012-08-07T09:07:42.413 に答える
2

-Xmx1024mオプションを使用して、JVM により多くのメモリを割り当ててみてください(例): How to deal with "java.lang.OutOfMemoryError: Java heap space" error (64MB heap size)

于 2012-08-07T09:06:08.427 に答える
0

どのくらいのデータを保存しようとしていますか?大量のデータを一度にMongoDBに保存しようとしていると思います。

于 2012-08-07T09:10:42.603 に答える
0

実行構成の実行構成でこれらを編集します。プロジェクトルートを右クリックします --> Run As-> Run Configurations

VM 引数に -Xms<size> と -Xmx<size> を追加

于 2012-08-07T10:47:14.877 に答える