Огромное использование системной памяти Java-приложений по сравнению с использованием кучи

У меня есть микросервис, как Java Framework. Многие процессы Java выполняются на одном компьютере (Ubuntu 14.04.4 LTS). Процессы Java используют много системной памяти, поэтому пространство подкачки используется интенсивно. Отчеты jstat gc не объясняют использование системной памяти. Все процессы Java запускаются с параметрами

-XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90

заставить JVM вернуть память системе. Без параметров проблема сохраняется. Некоторые компоненты Java используют движок nashorn для написания некоторых функций.

Может кто-нибудь объяснить поведение здесь?

Существуют ли какие-либо патаметры jvm, ограничивающие использование огромной системной памяти?

Как сделать так, чтобы ОС была более строгой с распределением памяти для jvm?

Некоторые данные:

Компонент А (с нашорном)

Топ:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
2400 xxxxxx    20   0 13.933g 807496   7332 S   0.0  2.5   4180:15 java

JSTAT-GC 2400:

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
512.0  512.0   0.0   400.0  19456.0  12751.6   62464.0    59862.3   89688.0 84866.6 10624.0 9440.4 2165265 15977.896 16816 1813.836 17791.732
емкость: ок. 180 МБиспользование: ок. 165 МБсистемные ресурсы: ок. 800 МБ

Почему компонент использует в 4 раза больше памяти областей ГХ?

Компонент Б (без нашорна)

Топ:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
19476  xxxx     20   0 13.465g 120436   7836 S   7.0  0.4  22:40.76 java

JSTAT-GC 19476:

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
512.0  512.0   0.0    0.0   41472.0  25408.7   343040.0    7164.5   17664.0 17183.1 2048.0 1919.4   3650   10.806  939    16.788   27.594
емкость: ок. 403 МБиспользование: ок. 52 МБсистемные ресурсы: 120 МБ

Здесь емкость области GC больше, чем фактическое использование системной памяти. Тем не менее, использование системной памяти в два раза больше, чем GC. IMO этот компонент ведет себя нормально, поскольку библиотеки и т. Д. Также частично отображаются в память.

Компонент С (без нашорна)

Топ:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
2272 xxxxxx    20   0 13.382g 922944  11108 S   0.7  2.8  40033:41 java

JSTAT-GC 2272:

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
1024.0 1024.0 868.0   0.0   36352.0  23866.1   76800.0    56580.2   68864.0 64571.1 8448.0 7460.6 31974159 199295.501 844692 134644.040 333939.541
емкость: ок. 190 МБиспользование: ок. 152 МБсистемные ресурсы: 920 МБ

Почему компонент использует в 6 раз больше памяти областей ГХ?

Ответы на вопрос(1)

Ваш ответ на вопрос