当前位置: 首页 > 知识库问答 >
问题:

播放框架1.2.5: OutOfMemoryError发生:Java堆空间在播放框架

黄意智
2023-03-14

在用400k记录查询MongoDb时,我得到了< code>OutOfMemoryError。我收集了大约40万条用户记录。当我试图检索所有用户(在弹性搜索中转储)时,我得到了< code>OutOfMemoryError错误。

我已经浏览过这个链接,在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)

共有2个答案

颜永怡
2023-03-14

内存不足,因为将太多对象加载到内存中。

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

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

尝试考虑另一种设计,您可以在持久存储中进行一些计算,或者通过少量数据(100或1000)加载数据,因为加载数据块会导致可预测的内存消耗

麻学博
2023-03-14

请检查你的应用程序,你运行内存溢出,因为你在内存中有许多大对象。我遇到了同样的问题…因为Play中的所有变量/函数!是静态的,所以其中一些不能由GC释放。

请检查您使用TemplateLoader、RenderArgs、Jobs的方式...并尝试减少游戏池和作业池(如果您正在设置),最好是4GB内存14个游戏池(在我的例子中)。

 类似资料:
  • 而是使用EventStream而不是ArchivedEventStream,当我运行命令alert(通知)消息时,会转到除原始发件人之外的所有连接套接字,我也可以如何发送到原始发件人。 这是我的模型和控制器,使用WebSocket 事件模型 这是控制器

  • 问题内容: 我有一个非常老的linux系统,并安装了java和play框架。当我运行Java时,我得到: 所以我限制了application.conf中的Java堆空间: 使用该设置,我可以运行播放测试,播放运行等。 但是我无法运行: 是否有全局配置文件或环境变量,可以在其中限制Java Play框架的全局堆空间? 更新: 同样,以下内容不起作用: 更新2 : 记忆: 限制: BR 雷内 问题答案

  • Rest服务器(Play Framework)中的相关问题在负载测试期间出现“读取超时”异常 java版本“1.8.0_31”java(TM)SE运行时环境(Build1.8.0_31-B13)java HotSpot(TM)64位服务器VM(Build25.31-B07,混合模式) 我正在我的本地PC中测试jmeter。我使用了2000个线程,出现了超时异常,并且Socket不知为什么没有关闭。

  • 问题内容: 我想知道(我的Java应用程序的)播放框架版本与我的应用程序的Java版本之间是否有任何联系? 示例:如果我使用play 2.2.1并在计算机上安装了java8。我可以在代码中使用java8吗? 如果有连接。java8的第一个播放版本是什么? 谢谢你妮芙 问题答案: Play 2.3.x是提及Java 8的第一个版本,请参见此处 今天早晨,我正在与我的一位同事交谈,他发现运行2.1.x

  • 我想知道如何使用Play2.0中的模型和下面列出的查询来查询数据库。我没有看到将直接sql传递到play framework 2.0中的选项。 我想得到一份特定月份的费用清单。 我看到的选项是查询所有费用,然后使用Date对象解析它们列出的月份。 我认为应该有一种有效的方法,我似乎找不到一种使用ebean和Java play framework 2.0来执行此查询的方法。 使现代化 谢谢Nico,

  • 在Windows上作为Java进程启动独立的play应用程序时遇到问题。我使用“play dist”命令生成一个zip文件,其中包含运行应用程序所需的所有jar。zip文件还包含“start”文件,该文件包含一个脚本,该脚本应该启动应用程序(在Linux服务器上运行良好)。 我找到了带有“play dist unzip”命令的sbtgoodies插件https://github.com/types