Внутренний раздел собственной памяти Java - PullRequest
2 голосов
/ 07 марта 2019

Запустив процесс Hadoop namenode на JDK 1.8.0.92 с Xmx и Xmx = 75Gb, мы наблюдали скачок системной памяти в интервале x. И медленно произошло ООМ.

В процессе отладки мы обнаружили следующее:

RSS превысил Xmx

Это куча - нет, это не куча (можно увидеть использование в JMX, который находится под контролем)

Это не куча или утечка - из дампа кучи и jmap -histo утечка не наблюдается.

Тогда что? Включен NMT в окружающем режиме.

Тогда что? Видно, что рост происходит на внутреннем разделе родной памяти И эта схема выглядит следующим образом: когда число потоков достигло высокого значения, объем выделенной памяти увеличивался и постепенно увеличивался.

Исправления: Пробовал -XX: MaxDirectMemorySize = 3g (без изменений все еще нарушается ограничение) Пробовал -Djdk.nio.maxCachedBufferSize (пробовал с jdk1.8.0.192 при включении этой опции все еще наблюдается утечка) MALLOC_ARENA_MAX - по умолчанию это значение равно 4 на Hadoop-configs.sh, попытка с 1 и 2, утечка все еще происходит.

Вопросы

Как управлять внутренним разделом родной памяти?

Как перечислить причину этой проблемы и использование этого внутреннего раздела?

Как определить значение Malloc в JVM?

...