Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Play Framework 1.2.5:OutOfMemoryError发生:Play Framework中的Java堆空间_Java_Out Of Memory_Playframework 1.x - Fatal编程技术网

Play Framework 1.2.5:OutOfMemoryError发生:Play Framework中的Java堆空间

Play Framework 1.2.5:OutOfMemoryError发生:Play Framework中的Java堆空间,java,out-of-memory,playframework-1.x,Java,Out Of Memory,Playframework 1.x,在使用400k记录查询MongoDb时,我获取了OutOfMemoryError。 我有一个用户集合,大约有40万条记录。当我尝试检索所有用户(在弹性搜索中转储它)时,我得到OutOfMemoryError错误 我已经通过link并在application.config中添加了jvm.memory=-Xms64m-Xmx1024m,但仍然是相同的异常 这是我的堆栈跟踪- OutOfMemoryError occured : Java heap space play.exceptions.Jav

在使用400k记录查询MongoDb时,我获取了OutOfMemoryError。 我有一个用户集合,大约有40万条记录。当我尝试检索所有用户(在弹性搜索中转储它)时,我得到
OutOfMemoryError
错误

我已经通过link并在application.config中添加了jvm.memory=-Xms64m-Xmx1024m,但仍然是相同的异常

这是我的堆栈跟踪-

OutOfMemoryError occured : Java heap space

play.exceptions.JavaExecutionException: Java heap space
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
        at Invocation.HTTP Request(Play!)
Caused by: java.lang.OutOfMemoryError: Java heap space
        at java.util.HashMap.<init>(HashMap.java:209)
        at java.util.LinkedHashMap.<init>(LinkedHashMap.java:181)
        at org.bson.BasicBSONObject.<init>(BasicBSONObject.java:45)
        at com.mongodb.BasicDBObject.<init>(BasicDBObject.java:42)
        at com.mongodb.DefaultDBCallback._create(DefaultDBCallback.java:124)
        at com.mongodb.DefaultDBCallback.create(DefaultDBCallback.java:87)
        at org.bson.BasicBSONCallback.objectStart(BasicBSONCallback.java:68)
        at com.mongodb.DefaultDBCallback.objectStart(DefaultDBCallback.java:63)
        at org.bson.BasicBSONCallback.objectStart(BasicBSONCallback.java:63)
        at org.bson.BasicBSONDecoder.decodeElement(BasicBSONDecoder.java:206)
        at org.bson.BasicBSONDecoder.decodeElement(BasicBSONDecoder.java:197)
        at org.bson.BasicBSONDecoder.decodeElement(BasicBSONDecoder.java:207)
        at org.bson.BasicBSONDecoder._decode(BasicBSONDecoder.java:80)
        at org.bson.BasicBSONDecoder.decode(BasicBSONDecoder.java:58)
        at com.mongodb.DefaultDBDecoder.decode(DefaultDBDecoder.java:56)
        at com.mongodb.Response.<init>(Response.java:66)
        at com.mongodb.DBPort.go(DBPort.java:128)
        at com.mongodb.DBPort.call(DBPort.java:79)
        at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:218)
        at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:189)
        at com.mongodb.DBApiLayer$Result._advance(DBApiLayer.java:452)
        at com.mongodb.DBApiLayer$Result.hasNext(DBApiLayer.java:418)
        at com.mongodb.DBCursor._hasNext(DBCursor.java:503)
        at com.mongodb.DBCursor.hasNext(DBCursor.java:523)
        at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1520)
        at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1332)
        at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1318)
        at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:504)
        at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:499)
        at com.salambc.service.ProfileService.getUsers(ProfileService.java:895)
        at controllers.Admin.index(Admin.java:56)
发生OutOfMemory错误:Java堆空间 play.exceptions.JavaExecutionException:Java堆空间 atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:237) 在Invocation.HTTP请求时(播放!) 原因:java.lang.OutOfMemoryError:java堆空间 在java.util.HashMap.(HashMap.java:209) 位于java.util.LinkedHashMap。(LinkedHashMap.java:181) 位于org.bson.basicbonobject(basicbonobject.java:45) 位于com.mongodb.BasicDBObject(BasicDBObject.java:42) 在com.mongodb.DefaultDBCallback.\u创建(DefaultDBCallback.java:124) 在com.mongodb.DefaultDBCallback.create上(DefaultDBCallback.java:87) 位于org.bson.basicboncallback.objectStart(basicboncallback.java:68) 位于com.mongodb.DefaultDBCallback.objectStart(DefaultDBCallback.java:63) 位于org.bson.basicboncallback.objectStart(basicboncallback.java:63) 位于org.bson.basicbondecoder.decodelement(basicbondecoder.java:206) 位于org.bson.basicbondecoder.decodelement(basicbondecoder.java:197) 位于org.bson.basicbondecoder.decodelement(basicbondecoder.java:207) 在org.bson.basicbondecoder.\u decode(basicbondecoder.java:80) 位于org.bson.basicbondecoder.decode(basicbondecoder.java:58) 位于com.mongodb.DefaultDBDecoder.decode(DefaultDBDecoder.java:56) 位于com.mongodb.Response(Response.java:66) 位于com.mongodb.DBPort.go(DBPort.java:128) 在com.mongodb.DBPort.call上(DBPort.java:79) 在com.mongodb.DBTCPConnector.call上(DBTCPConnector.java:218) 位于com.mongodb.DBTCPConnector.call(DBTCPConnector.java:189) 在com.mongodb.DBApiLayer$Result.\u advance(DBApiLayer.java:452) 位于com.mongodb.DBApiLayer$Result.hasNext(DBApiLayer.java:418) 在com.mongodb.DBCursor.\u hasNext(DBCursor.java:503) 位于com.mongodb.DBCursor.hasNext(DBCursor.java:523) 位于org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1520) 位于org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1332) 位于org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1318) 位于org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:504) 位于org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:499) 位于com.salambc.service.ProfileService.getUsers(ProfileService.java:895) 位于controllers.Admin.index(Admin.java:56)
内存不足,因为在内存中加载了太多对象

在java内存中加载这么多对象不是一个好做法。如果有很多用户试图执行这个用例,您就无法扩展

为java进程提供更多内存可以解决当前的bug,但从长远来看,这不是一个解决方案


试着考虑另一种设计,您可以在持久性存储中进行一些计算,或者通过少量数据(100或1000)加载数据,因为加载数据块会导致可预测的内存消耗。请检查您的应用程序,内存不足,因为内存中有许多大对象。我遇到了同样的问题。。。因为所有变量/函数都在起作用!是静态的,因此其中一些不能被GC释放


请检查您使用TemplateLoader、渲染器、作业的方式。。。并尽量减少播放池和作业池(如果您正在设置),最好是4GB RAM的14个播放池(在我的情况下)。

您能给它多少内存?首先,我会尽最大努力,看看这是否会产生影响,然后确定是否可以减少;它只是JVM内存不足的地方,很容易由其他原因造成。探查器可以更深入地了解所有内存的去向。我最多可以提供2GB内存(因为我正在本地尝试,我的RAM大约为3GB)…因为我已经提供了1GB左右的内存。它是否足以处理400万条记录和其他操作???尝试将其减少到100000条记录。如果这有帮助的话,那么我们可以通过增加内存来解决这个问题。然后,您应该考虑减少内存占用。