Сколько памяти нужно для запуска Java? - PullRequest
0 голосов
/ 01 марта 2019

У меня проблемы с запуском java в среде с элементами управления памятью.Мой сценарий использования - движок Sun Grid (SGE), но я могу воспроизвести его с помощью ulimit.

Когда я пытаюсь запустить Java с ограничением памяти (-Xmx), я нахожу, что мне все еще нужно разрешитьнамного больший объем памяти от ulimit.

evaben@evaben:~$ (ulimit -v 1000000; java -Xmx500m -version; )
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
evaben@evaben:~$ (ulimit -v 2000000; java -Xmx500m -version; )
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
evaben@evaben:~$ (ulimit -v 4000000; java -Xmx500m -version; )
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
evaben@evaben:~$ 

Таким образом, для -Xmx 500 м требуется 4G пространства от ulimit.Я знаю, что Xmx ограничивает только некоторые аспекты использования памяти Java, может быть, только кучу.Но накладные расходы 3.5G или 700% кажутся чрезмерными.

Я попытался выполнить некоторую трассировку, и я вижу, что вышеупомянутая java отображает несколько больших блоков, возможно, из разных потоков или дочерних процессов.

strace -f -e memory java -Xmx500M -version 2>&1 1>/dev/null  | grep mmap | grep ENOMEM | wc -l
96

strace -f -e memory java -Xmx500M -version 2>&1 1>/dev/null  | grep mmap | awk '$1 == "[pid"{print $2}' | sort | uniq -c 
> many pids mmapping

/ bin / time onlyсообщает RSS, около 30 Мбайт в этом примере.Есть ли простой способ показать общее количество запросов alloc / mmap?

Почему java требует так много памяти?Есть ли способ заставить java работать с меньшим выделением памяти?

...