Ошибка при получении 100K записей из mongodb в Scala с использованием Akk-Http - PullRequest
0 голосов
/ 30 декабря 2018

Я написал следующий код для извлечения записей и выполнения действий

На маршруте 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))

При тестировании API с использованием wrk с 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

Есть ли способ решить эту проблему без увеличения размера кучи?

ОБНОВЛЕНО

Размер коллекции = 33 МБ и

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"

1 Ответ

0 голосов
/ 30 декабря 2018

Если ваша куча не может содержать все данные, которые вам понадобятся для потоковой передачи результата, как вы его получите: https://doc.akka.io/docs/akka-http/current/routing-dsl/source-streaming-support.html

...