Огромное использование системной памяти 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 раз больше памяти областей ГХ?