10 важни JVM опции за производство JAVA Application System

Запознайте се с основните JVM (Java Virtual Machine) опции за по-добра производителност и отстраняване на грешки.


Ако сте 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 GB около. Така че, когато стартира JVM, паметта от купи ще бъде толкова голяма. Изненадващо да! Това се извършва, за да се предотврати оразмеряването по време на стартиране и да се подобри времето за стартиране на JVM.

-Xmx – Тази опция е да се определи максималният размер на JVM на купчина, например Xmx2048m, което означава, че максималният размер на JVM ще бъде само 2 GB.

По същество винаги ще имате-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

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

Тези опции на JVM се използват, за да се даде възможност за регистриране на събирането на боклука, което е високоефективно за чувствителната към латентността операция. Ние бяхме в системи, където се стремим към микросекундни латентности и ако разпознаете, голямо събиране на боклук може да продължи няколко милисекунди.

Така че, ние търсим GC безплатна архитектура като LMAX разрушител, но наистина, ако нямате намерение за ултра латентно приложение, тази удобна опция ще ви посъветва важни статистики за GC. Той ще ви даде дали става въпрос за голямо или малко събиране на боклука, какъв вид боклукър се прилага, колко често се възстановява паметта и колко време е задържал и т.н..

Грешка в „OutOfMemory“ грешка

За да задействате хепи-дампинга от паметта, можете да използвате -XX: + HeapDumpOnOutOfMemoryError

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

Сметката за купчината ще бъде настроена в „текущата директория“ на JVM по подразбиране. Ако искате да създадете купища сметища в конкретна директория, тогава стартирайте

-XX: HeapDumpPath = [директория пътя-към-heap-dump]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

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

Ако искаме да рестартираме сървъра веднага след появата на памет, тогава можем да зададем този параметър със същата цел –

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

Проследяване на разтоварване и разтоварване

-XX: + TraceClassLoading и -XX: + TraceClassUnloading са две опции за JVM, които използваме за отпечатване на информацията за записване всеки път, когато класовете се зареждат в JVM или разтоварят от JVM. Тези JVM флагове са полезни, ако имате някакъв тип изтичане на памет, свързан с classloader и подозирате, че класовете не разтоварват или събират боклук.

Java classpath

Говорейки за JAVA Classpath тогава-Xbootclasspath посочва записи на classpath, които искаме да бъдат заредени без проверка. JVM проверява всички класове, които зарежда, за да гарантира, че не се опитва да обезобразява обект с int, изскача излишни записи от стека или натиска твърде много и т.н.. 

Поставянето на клас на bootclasspath също пропуска разходите, но трябва да се използва само когато знаете, че класовете са били проверявани много пъти преди. В JRuby това намали времето за стартиране наполовина и повече за обикновен скрипт.

Профилиране

Профилирането на Java е процесът на мониторинг на различни параметри на нивата на JVM като изпълнения на методи, изпълнение на нишки, събиране на боклук и създаване на обекти. Java Profiling ви предоставя и по-фин изглед на изпълнението на целевото ви приложение и неговото използване на ресурсите.

-Xprof
-Xrunhprof

64-битова среда

В OS средата, в която са инсталирани както 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