使用Akk Http从Scala中的mongodb获取100K记录时出错

使用Akk Http从Scala中的mongodb获取100K记录时出错,mongodb,scala,akka-http,Mongodb,Scala,Akka Http,我编写了以下代码来获取记录并执行操作 在akka http路由上 complete(mongoDB.getCollection(getCollectionName(user_id, list_id)).find() .getAllContacts(user_id, list_id).map { line => validateNumber(line.phone, prefixTrim) }.toFuture().map(_.size.toString))

我编写了以下代码来获取记录并执行操作

在akka http路由上

complete(mongoDB.getCollection(getCollectionName(user_id, list_id)).find()
    .getAllContacts(user_id, list_id).map { line =>
        validateNumber(line.phone, prefixTrim)
    }.toFuture().map(_.size.toString))
在使用wrk测试API时,有1000个连接和10个线程,我发现以下错误

java.lang.OutOfMemoryError: GC overhead limit exceeded
 Error during processing of request: 'Boxed Error'. 
Completing with 500 Internal Server Error response. 
To change default exception handling behavior, provide a custom ExceptionHandler.
java.util.concurrent.ExecutionException: Boxed Error

Caused by: java.lang.OutOfMemoryError: Java heap space
有没有办法在不增加堆大小的情况下解决这个问题

更新

集合大小=33MB 及


如果堆无法保存所有数据,则需要在获得结果时对其进行流式处理:

您正在加载的这个集合有多大?mongo是不是一下子就把这一切都记起来了?您为最大JVM内存设置的配置值是多少?(
-Xmx
标志)?我已经更新了我的问题。似乎所有数据都一次加载到内存中,因为您的java应用程序没有足够的内存来保存100K条记录。您可以使用java-Xmx标志增加它,或者找到一种不将所有数据保存到内存中的方法,例如通过流式处理
java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 268435456                           {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 4294967296                          {product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
java version "1.8.0_131"