2012-08-07 37 views
2

我使用Tomcat,Eclipse,Java EE,MongoDB。使用MongoDB創建Java堆空間

當我運行我的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的版本是舊的和完整的錯誤的,我現在使用的2.8版本,現在它的工作,謝謝

+0

的Tomcat,Java和MongoDB的版本,你使用的是哪個? – beny23 2012-08-07 09:21:53

+0

我使用Java 6,mongodb 2.0.6和Apache TomEE 1.0.0 – 2012-08-07 09:36:25

+0

'Eclipse允許'表示?您是否在運行配置中添加了內存設置>參數 – titogeo 2012-08-07 09:48:31

回答

3

嘗試增加堆大小

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

請參閱我的更改。 – 2012-08-07 09:32:53

0

您試圖保存多少數據? 我認爲你正試圖將大量數據一次性存儲到MongoDB中。

+0

這是一個比解答更多的評論... – beny23 2012-08-07 09:22:40

+0

沒有太多的數據要保存,只有10行 – 2012-08-07 09:30:28

0

編輯這些在運行配置 對於運行配置 右鍵點擊你的項目根 - >運行方式 - >運行配置

Add -Xms<size> and -Xmx<size> in VM arguments