OrientDB - процесс Java: память вышла из-под контроля

Я написал парализованный алгоритм для выполнения вычислений с данными, хранящимися в таблице Orient.

Чтобы взять под контроль память, я пытаюсь разбить эти данные на страницы и пытаюсь распараллелить свой алгоритм увеличения производительности (используя Future task).

Настройки моего Востока:

set ORIENTDB_SETTINGS=-Dprofiler.enabled=true -Dstorage.diskCache.bufferSize=12906

set JAVA_OPTS_SCRIPT=-Xmx4096M -Djna.nosys=true -XX:+HeapDumpOnOutOfMemoryError -XX:PermSize=1024m 
-XX:MaxPermSize=1024m
-Djava.awt.headless=true -Dfile.encoding=UTF8 -Drhino.opt.level=9
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Xmx исправлен на 4 ГБ (4096 МБ в верхней конфигурации), я пытался отслеживать свой процесс Orient с помощью JVisualVM, как показано на следующем снимке экрана:

Использование памяти OServermanager

На JVIsualVm процесс использует память кучи всегда меньше своего лимита, но в списке процессов Windows этот же процесс (я выделил PID) занимает 7 ГБ и постоянно растет.

Вот мой код:

for (Callable worker : workers) {
    Future<Boolean> submit = executor.submit(worker);
    futures.add(submit);
}
workers.clear();
workers = null;
boolean success = true;

for (Future<Boolean> future : futures) {
    try {
        if (Boolean.TRUE.equals(future.get())) {
            [CODE BLOCK]
        } else {
            [CODE BLOCK FOR REPROCESS FUTURE]
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}

person Joe Taras    schedule 07.03.2016    source источник
comment
Привет, какую версию используешь?   -  person Andrey Lomakin    schedule 07.03.2016


Ответы (1)


Судя по вашей картинке, процесс потреблял 7 ГБ памяти, согласно вашим настройкам -Dstorage.diskCache.bufferSize=12906 вы разрешаете потреблять для хранения чуть меньше 13 ГБ памяти. Если вы хотите, чтобы процесс потреблял меньше памяти, вам следует изменить максимальный лимит потребляемой памяти в настройках. Кэш диска никогда не освобождает память для достижения минимального времени ответа на запрос для самого широкого диапазона запросов.

person Andrey Lomakin    schedule 07.03.2016
comment
Спасибо. Итак, в списке процессов Windows я вижу, что вся занятая память (ОЗУ + дисковый кеш) - person Joe Taras; 07.03.2016