10 важных опций JVM для производственной прикладной системы JAVA

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


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

Обзор параметров JVM

Если говорить о параметрах JVM, то есть три типа параметров, которые вы можете включить в JVM: стандартные, нестандартные и расширенные параметры. Если вы используете расширенную опцию, вы всегда используете опцию с -XX. Точно так же, если вы применяете нестандартную опцию, вы используете -X. Стандартные опции ничего не добавляют к опции.

Какие параметры JVM используются вашим приложением?

Если приложение работает в Linux, вы можете использовать ps -ef | grep java для идентификации процесса Java и просмотра параметров JVM, напечатанных как аргументы процесса. Если в системе выполняется более одного Java-процесса, вам может потребоваться использовать ключевое слово, уникальное для вашего Java-приложения..

Если ваш аргумент слишком длинный, попробуйте использовать ps -auxww, так как эта команда также покажет длинный список аргументов..

Имея список флагов JVM, вы можете получить представление о поведении любого Java-приложения, например Tomcat..

Размер кучи Java

 -Xms – установить начальный размер кучи Java
-Xmx – установить максимальный размер кучи Java
-Xss – установить размер стека Java-потока

-Xms – Этот параметр определяет начальный размер кучи для JVM, например Xms2048m, что означает, что начальный размер кучи JVM составляет около 2 ГБ. Итак, когда JVM запускается, куча памяти будет очень большой. На удивление да! Это делается для предотвращения изменения размера во время запуска и увеличения времени запуска JVM.

-Xmx – Этот параметр определяет максимальный размер кучи JVM, например Xmx2048m, что означает, что максимальный размер кучи JVM будет составлять только 2 ГБ..

По сути, у вас всегда будет Xmsand-Xmx.

Установить процент кучи

-XX: MaxHeapFreeRatio – устанавливает максимальный процент свободного кучи после GC, чтобы избежать сжатия.

-XX: MinHeapFreeRatio – устанавливает минимальный процент свободного кучи после GC, чтобы избежать расширения; для мониторинга использования кучи вы можете использовать JCosole.

Включить обмен данными класса

Укажите опцию Xshareclasses, чтобы включить общий доступ к данным класса в общем кэше классов. JVM подключается к существующему кешу или создает кеш, если он не существует. У вас может быть несколько кешей, и вы можете указать правильный кеш, добавив подопцию в опцию -Xshareclasses.

Размер PermGen

Ранее параметры JVM определяли размер кучи памяти, но -XX: PermSize – для определения размера пространства PermGen, в котором сохраняются пул строк и метаданные класса. Этот параметр особенно эффективен для веб-сервера, такого как Tomcat, который часто загружает классы веб-приложения во время развертывания..

Кстати, стоит понимать, что пространство PermGen занято Metaspace в Java 8, и этот параметр не применим, если вы работаете с JRE 8 JVM.

Распечатать GC

-многословен: дс – журналы сборщик мусора работает и сколько времени они принимают.
-XX: + PrintGCDetails – включает в себя данные из -verbose: gc, но также добавляет информацию о размере нового поколения и более точные сроки.
-XX: -PrintGCTimeStamps – Печать отметок времени при сборке мусора.

Эти параметры JVM используются для включения ведения журнала сбора мусора, что очень эффективно для чувствительной к задержке операции. Раньше мы работали в системах, где мы ищем задержки в микросекундах, и если вы узнаете, большая сборка мусора может длиться несколько миллисекунд.

Итак, мы используем свободную от GC архитектуру, такую ​​как LMAX Disruptor, но, действительно, если вы не собираетесь использовать приложение, чувствительное к ультра-латентности, этот удобный вариант посоветует вам важную статистику GC. Он узнает, будет ли это большая или небольшая сборка мусора, какой тип сборщика мусора применяется, как часто восстанавливается память и сколько времени она держала и т. Д..

Обработка ошибки OutOfMemory

Чтобы вызвать дамп кучи из нехватки памяти, вы можете использовать -XX: + HeapDumpOnOutOfMemoryError

Эта опция JVM создает дамп стека, когда ваша JVM умирает с ошибкой OutOfMemory. Нет затрат, если OOM действительно не происходит. Этот флаг является обязательным для производственных систем, поскольку обычно это единственный способ глубоко определить проблему.

Дамп кучи будет установлен в «текущем каталоге» JVM по умолчанию. Если вы хотите создать дамп кучи в определенном каталоге, запустите

-XX: HeapDumpPath = [путь к каталогу дампа кучи]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

Файл дампа кучи может быть огромного размера, вплоть до гигабайт, поэтому убедитесь, что целевая файловая система обеспечивает достаточную емкость.

Если мы хотим перезапустить сервер сразу после появления нехватки памяти, мы можем установить этот параметр с той же целью:

XX: OnOutOfMemoryError ="выключение -r"

Трассировка классов загрузки и выгрузки

-XX: + TraceClassLoading и -XX: + TraceClassUnloading – это две опции JVM, которые мы используем для печати информации журналов всякий раз, когда классы загружаются в JVM или выгружаются из JVM. Эти флаги JVM полезны, если у вас есть какой-либо тип утечки памяти, связанный с загрузчиком классов и подозревающий, что классы не выгружаются или не собирают мусор.

Java classpath

Говоря о JAVA Classpath then-Xbootclasspath определяет записи пути к классам, которые мы хотим загрузить без проверки. JVM проверяет все классы, которые она загружает, чтобы убедиться, что она не пытается разыменовать объект с помощью int, выталкивает дополнительные записи из стека или выталкивает слишком много и т. Д.. 

Помещение class в bootclasspath также пропускает стоимость, но его следует использовать только тогда, когда вы знаете, что классы проверялись много раз раньше. В JRuby это сократило время запуска вдвое и более для простого скрипта.

Профилирование

Java Profiling – это процесс мониторинга различных параметров уровней JVM, таких как выполнение методов, выполнение потоков, сборка мусора и создание объектов. Java Profiling обеспечивает более точное представление о выполнении целевого приложения и использовании его ресурсов, а также.

-Xprof
-Xrunhprof

64-битная среда

В среде ОС, в которой установлены 32- и 64-разрядные пакеты, JVM автоматически выбирает 32-разрядные пакеты среды по умолчанию..

Если мы хотим установить 64-битную среду вручную, мы можем сделать это с помощью параметра -d. И, очевидно, бит ОС может быть 32 или 64.

Вывод

Я надеюсь, что это поможет вам настроить параметры JVM для вашего приложения. Если вы заинтересованы в углубленном изучении управления памятью Java, проверьте это Курс удэми.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map