Рекомендуемые JVM-опции для DataGrid#

Ниже приведен минимальный рекомендуемый набор опций для корректной работы DataGrid.

Применение указанных опций позволяет улучшить производительность и стабильность работы продукта.

JVM-опции, которые применяются к OpenJDK 11 и 17#

Параметр

Описание

-Xmx

Максимальный размер Heap

-Xms

Начальный размер Heap (в общем случае выбирается равным Xmx)

-ea

Активация assertions

-server

Включение серверного режима в JVM

-XX:+ScavengeBeforeFullGC

Сборка в young-поколении перед Full GC

-XX:+AlwaysPreTouch

Инициализация памяти при аллокации Heap

-XX:+UnlockDiagnosticVMOptions

Включение возможности использования дополнительных отладочных опций

-Djava.net.preferIPv4Stack

Использование протокола IPv4

-Dnetworkaddress.cache.ttl

Используется для указания политики кеширования, успешного резолвинга DNS. Значение указывается как целое число для последующего указания количества времени в секундах, которое необходимо для кеширования успешного поиска. -1 означает «кешировать всегда»

-XX:+ExitOnOutOfMemoryError

Остановка JVM при событии OutOfMemoryError

-XX:+HeapDumpOnOutOfMemoryError

Снятие HeapDump при событии OutOfMemoryError

-XX:HeapDumpPath

Путь к HeapDump

-XX:ErrorFile

Путь к JVM crush dump

-Djava.io.tmpdir

Переопределение временной директории в JVM

-Dcom.sun.management.jmxremote.port

Указание порта для JMX

-Dcom.sun.management.jmxremote.authenticate

Включение аутентификации для подключения к JMX

-Dcom.sun.management.jmxremote.ssl

Включение SSL для JMX-соединений

-Dcom.sun.management.config.file

Путь к файлу конфигурации JMX

-Dfile.encoding

Задает кодировку по умолчанию

-XX:+PerfDisableSharedMem

Снижает вероятность возникновения GC-паузы при работе внутренних механизмов профилирования

-XX:+UnlockExperimentalVMOptions

Включение экспериментальных параметров JVM

-XX:-OmitStackTraceInFastThrow

Включение вывода стек-трейсов для определенной группы исключительных ситуаций

-XX:+LogVMOutput

Включение логирования JVM

-XX:+UseShenandoahGC

Использование сборщика мусора Shenandoah

-XX:PrintSafepointStatisticsCount

Количество записей в последнем отчете safepoint

-XX:StartFlightRecording

Активирует JFR и определяет основные параметры его работы

-XX:FlightRecorderOptions

Задает дополнительные параметры работы JFR

-Xlog:gc*

Настройка log-файла GC, детализация, ротация

-Xlog:safepoint

Настройка log-файла safepoint, детализация

-XX:G1NewSizePercent

Задает размер young-поколения в процентах

-XX:+PrintSafepointStatistics

Выводит в log-файл статистику по safepoint-паузам

-XX:+SafepointTimeout

Выводит в log-файл информацию о потоках, у которых time to safepoint превысило предустановленный тайм-аут

-XX:SafepointTimeoutDelay

Если time to safepoint потока превысит этот тайм-аут и используется опция -XX:+SafepointTimeout, в log-файле выведется информация о данном потоке

-XX:G1MaxNewSizePercent

Устанавливает максимальный размер young-региона. Задается в процентах от размера Heap. Используется для настройки производительности в высоконагруженных проектах

-XX:InitiatingHeapOccupancyPercent

Устанавливает заполненность Heap в процентах, с которой начинается сборка мусора

-XX:-G1UseAdaptiveIHOP

Отключение Adaptive IHOP (автоматическое определение оптимального IHOP по процессу маркировки)

-XX:G1HeapRegionSize

Устанавливает размер региона для GC G1

-Dnode.id

Вспомогательный идентификатор для различных интеграций

-Dmodule.id

Вспомогательный идентификатор для различных интеграций

-Djava.security.properties

Задает путь к файлу security.properties, который следует использовать при запуске JVM

-Dgroup.id

Вспомогательный идентификатор для различных интеграций

-Dconfig-store.disabled

Для интеграции с конфигуратором

-Dplatform-config

Для интеграции с конфигуратором

-Djndi-store.disabled

Для интеграции с конфигуратором

-Dcom.sun.management.jmxremote

Включение JMX

-Dlog4j2.formatMsgNoLookups

WA к уязвимости старых Log4j2

JVM-опции, которые применяются к OpenJDK 11#

Параметр

Описание

--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED

Позволяет получать доступ к публичным полям и методам пакета в runtime

--add-exports=java.base/sun.nio.ch=ALL-UNNAMED

Позволяет получать доступ к публичным полям и методам пакета в runtime

--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED

Позволяет получать доступ к публичным полям и методам пакета в runtime

--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED

Позволяет получать доступ к публичным полям и методам пакета в runtime

--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED

Позволяет получать доступ к публичным полям и методам пакета в runtime

--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--illegal-access=permit

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

-XX:-UseBiasedLocking

Отключение Biased Locking. Оптимизация неэффективная для сценариев с низкими задержками (low-latency)

JVM-опции, которые применяются к OpenJDK 17#

Параметр

Описание

--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/sun.nio.ch=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.io=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.nio=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.util=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.util.concurrent=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.lang=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.lang.invoke=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.math=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.sql/java.sql=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.lang.reflect=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.time=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.base/java.text=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens=java.management/sun.management=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

--add-opens java.desktop/java.awt.font=ALL-UNNAMED

Позволяет получать доступ ко всем (не только к публичным) полям и методам пакета в runtime

JVM-опции, которые применяются к DataGrid#

Параметр

Описание

-DIGNITE_AFFINITY_HISTORY_SIZE=50

Параметр сокращает используемый размер heap при большом количестве объектов за счет уменьшения хранимой истории аффинити-функции

-DIGNITE_CLUSTER_NAME=

Имя кластера

-DIGNITE_CLUSTER_TYPE=

Тип кластера

-DIGNITE_DIAGNOSTIC_ENABLED=false

Параметр включает вывод дополнительной диагностики в Ignite, выключаем дополнительный вывод в некоторых случаях может оказать дополнительное негативные влияние и усугубить проблему

-DIGNITE_DISCOVERY_DISABLE_CACHE_METRICS_UPDATE=true

Eсли установлено значение true, метрики кеша не включаются в сообщение discovery об обновлении метрик (в этом случае сообщение содержит только кластерные метрики)

-DIGNITE_DUMP_THREADS_ON_FAILURE=false

Включает создание дампа потоков при появлении критической ошибке на узле, выключаем дополнительный вывод в некоторых случаях может оказать дополнительное негативные влияние и усугубить проблему

-DIGNITE_ENABLE_EXTRA_INDEX_REBUILD_LOGGING=true

Включает расширенное логирование создания/перестроения индексов

-DIGNITE_ENABLE_FORCIBLE_NODE_KILL=true

Установка параметра в true приведет к тому, что клиентские узлы, которые не были доступны с любого из серверных узлов через communicationSpi, будут выведены из топологии кластера

-DIGNITE_EXCHANGE_HISTORY_SIZE=100

Параметр устанавливает размер истории PME

-DIGNITE_HOME=

IGNITE_HOME

-DIGNITE_MBEAN_APPEND_CLASS_LOADER_ID=false

Параметр управляет добавлением хеш-кода загрузчика классов к имени MXBean. При установленном значении true к имени MXBean будет добавлен хеш-кода загрузчика классов, что помогает избежать конфликтов имен при работе с несколькими экземплярами Ignite в одной JVM

-DIGNITE_PROG_NAME=

IGNITE_PROG_NAME

-DIGNITE_QUIET=false

Включает или выключает расширенный режим логирования, значения, которые может принимать true/false

-DIGNITE_REUSE_MEMORY_ON_DEACTIVATE=true

Параметр управляет возможностью повторного использования памяти при деактивации узла

-DIGNITE_SUCCESS_FILE=

IGNITE_SUCCESS_FILE

-DIGNITE_TO_STRING_INCLUDE_SENSITIVE=false

Включает или выключает запись в лог информации, которая может содержать в себе конфиденциальные данный, значения, которые может принимать true/false

-DIGNITE_UPDATE_NOTIFIER=false

Если параметр установлен в false, то DataGrid не будет выполнять проверки наличия новых версий программного обеспечения

-DIGNITE_USE_ASYNC_FILE_IO_FACTORY=true

Если у свойства установлено значение true, DataGrid по умолчанию будет использовать фабрику асинхронного ввода-вывода файлов

-DIGNITE.DEPLOYMENT.ADDITIONAL.CHECK=true

Включение дополнительных проверок LocalDeploymentSpi. Необходим в редких кейсах наследников classloader

JVM-опции только для клиентских узлов, которые применяются к OpenJDK 17#

Параметр

Описание

-DIGNITE_START_CACHES_ON_JOIN=true

Включение инициализации прокси-кешей на клиентском узле во время его запуска

Вендорозависимые JVM-опции#

Openjdk#

Параметр

Описание

-XX:StartFlightRecording=disk={{ ignite_se_jfr_disk }},settings={{ ignite_se_jfr_settings }},maxage={{ ignite_se_jfr_maxage }},maxsize={{ ignite_se_jfr_maxsize }},dumponexit={{ ignite_se_jfr_dumponexit }},{% if ignite_se_jfr_dumponexit == 'True' %}filename={{ ignite_se_diag_dir }}/dumpjfr.jfr{% endif %}

При запуске JVM, JFR будут записываться на диск. Параметрами можно регулировать глубину хранения и детализацию JFR

-XX:FlightRecorderOptions=repository={{ ignite_se_diag_dir }},maxchunksize={{ ignite_se_jfr_maxchunksize }}

Указывает, куда помещать записанные JFR и задает размер chunk

Опции GC для Openjdk Java 11#

Параметр

Описание

-Xlog:gc*=debug,gc+classhisto=trace:file={{ ignite_se_jvm_gc_log }}:time,uptime,tags:filecount=50,filesize=50M

Настройка log-файла GC, детализация, ротация

-Xlog:safepoint:file={{ ignite_se_jvm_safepoint_log }}:time,uptime,tags:filecount=50,filesize=50M

Настройка log-файла safepoint, детализация, ротация

Настройка стабильной топологии (PROP_STABLE_TOPOLOGY)#

В in-memory-кластерах смена паролей от учетных записей DataGrid с помощью REST возможна, только если настроена стабильная топология. Она задается с помощью JVM-опции.

Java#
-DPROP_STABLE_TOPOLOGY="consistID1,consistID2,...,consistIDN"

где consistID1,consistID2,...,consistIDN — согласованные идентификаторы (consistent ID) узлов, которые составляют стабильную топологию.

Важно

На всех узла кластера с помощью опции PROP_STABLE_TOPOLOGY должны передаваться одинаковые списки consistent ID. Узлы, на которых списки будут отличаться, не войдут в тополгию.