OpenJ9 tomcat не запустится с параметром кучи с высокой -Xmx - PullRequest
2 голосов
/ 17 октября 2019

У меня есть приложение Spring, работающее в Tomcat 9.0.6 в Linux 64. Поскольку ему требуется много памяти, я хотел бы попробовать JJM OpenJ9, которая, предположительно, более эффективна в этом отношении (текущий предел кучи для Hotspot:-Xmx128G). Я установил 64-битный accepttopenjdk-8-jdk-openj9:

/usr/lib/jvm/adoptopenjdk-8-jdk-openj9/bin/java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
Eclipse OpenJ9 VM (build openj9-0.14.2, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190521_315 (JIT enabled, AOT enable
OpenJ9   - 4b1df46fe
OMR      - b56045d2
JCL      - a8c217d402 based on jdk8u212-b04)

Запуск tomcat вызывает следующую ошибку:

This JVM package only includes the '-Xcompressedrefs' configuration. Please run the VM without specifying the '-Xnocompressedrefs' option or by specifying the '-Xcompressedrefs' option.

После установки этой опции я получаю следующую ошибку:

JVMJ9GC028E Option too large: '-Xmx'
JVMJ9VM015W Initialization error for library j9gc29(2): Failed to initialize
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Документация не так ясна, но я нашел это: https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/mm_gc_compressed_refs.html

Compressed references are used by default on a 64-bit IBM SDK when the value of -Xmx, which sets the maximum Java heap size, is in the correct range. Start of changes for service refresh 2 fix pack 10On AIX®, Linux and Windows systems, the default range is 0 - 57 GB. For larger heap sizes, you can try to use compressed references by explicitly setting -Xcompressedrefs.End of changes for service refresh 2 fix pack 10 However, larger heap sizes might result in an out of memory condition at run time because the VM requires some memory at low addresses. You might be able to resolve an out of memory condition in low addresses by using the -Xmcrs option.

Так что, по сути, по крайней мере, эта сборка JDK поддерживает только сжатые ссылки, и вЧтобы использовать это, я должен установить его вручную, так как мой Xmx находится выше диапазона, в котором он включен по умолчанию, но это не удается, потому что моя ОС уже выделена для большей части <4 ГБ памяти, но некоторые необходимы для использования сжатых ссылок. Поскольку я никогда не могу гарантировать, что этого не произойдет, могу ли я использовать OpenJ9 без сжатых ссылок? И даст ли это хоть какие-то преимущества с точки зрения потребления памяти? Или я могу использовать сжатые ссылки с очень высокими настройками Xmx? </p>

Я также пытался установить эту опцию, но она не помогла: https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/openj9/xmcrs/index.html?view=embed

Как найти правильныйразмер для этого? 1G и 64м не удалось. Даже если я найду правильную настройку, как это значение будет гарантировать, что ОС еще не распределила все младшие адреса памяти?

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Ограничение на использование сжатой ссылки JVM составляет 57G, и вы не можете запустить его, если указан параметр -Xnocompressedrefs.

Разделение 57G задокументировано здесь: https://www.eclipse.org/openj9/docs/xcompressedrefs/

Проблема -Xnocompressedrefs упоминается в примечаниях к выпуску: https://github.com/eclipse/openj9/blob/master/doc/release-notes/0.15/0.15.md

Со ссылкой на: https://github.com/eclipse/openj9/issues/479

Создание одной JVM, поддерживающей оба, рассматривается в: https://github.com/eclipse/openj9/issues/643

https://github.com/eclipse/openj9/pull/7505

(Благодаря помощи сообщества Slack сообщества Eclipse OpenJ9, особенно Питера Шиптона)

0 голосов
/ 17 октября 2019

Я нашел эту сборку, которая разрешает несжатые ссылки и, таким образом, решает мои проблемы: https://adoptopenjdk.net/releases.html?variant=openjdk8&jvmVariant=openj9#linuxxl

...