Ръководство за Java Profilers

1. Общ преглед

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

Java Profiler е инструмент, който наблюдава Java байтовите конструкции и операции на ниво JVM . Тези кодови конструкции и операции включват създаване на обекти, итеративни изпълнения (включително рекурсивни извиквания), изпълнения на методи, изпълнения на нишки и колекции от боклук.

В тази статия ще обсъдим основните Java Profilers: JProfiler, YourKit, Java VisualVM и Netbeans Profiler.

2. JProfiler

JProfiler е най-добрият избор за много разработчици. С интуитивен потребителски интерфейс, JProfiler предоставя интерфейси за преглед на производителността на системата, използване на паметта, потенциални течове на памет и профилиране на нишки.

С тази информация можем лесно да разберем какво ни е необходимо, за да оптимизираме, премахнем или променим - в основната система.

Ето как изглежда интерфейсът на JProfiler:

JProfiler преглед интерфейс с функции

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

JProfiler също така предоставя разширено профилиране както за SQL, така и за NoSQL бази данни . Той предоставя конкретна поддръжка за профилиране на бази данни JDBC, JPA / Hibernate, MongoDB, Casandra и HBase.

Снимката по-долу показва интерфейса за сондиране JDBC със списък на текущите връзки:

Изглед за сондиране на база данни на JProfiler

Ако искаме да научим за дървото на повикванията за взаимодействия с нашата база данни и видим връзки, които могат да изтекат, JProfiler се справя добре с това.

Live Memory е една от характеристиките на JProfiler, която ни позволява да видим текущото използване на паметта от нашето приложение . Можем да видим използването на паметта за обектни декларации и екземпляри или за пълното дърво на повикванията.

В случай на дървото за извикване на разпределение, можем да изберем да видим дървото на обажданията на живи обекти, събрани от боклук обекти или и двете. Също така можем да решим дали това дърво за разпределение трябва да бъде за определен клас или пакет или за всички класове.

Екранът по-долу показва използването на паметта на живо от всички обекти с брой екземпляри:

Изглед на JProfiler на живо памет

JProfiler поддържа интеграция с популярни IDE като Eclipse, NetBeans и IntelliJ. Възможно е дори да преминете от моментна снимка към изходния код !

3. YourKit

YourKit Java Profiler работи на много различни платформи и осигурява отделни инсталации за всяка поддържана операционна система (Windows, MacOS, Linux, Solaris, FreeBSD и др.).

Подобно на JProfiler, YourKit има основни функции за визуализиране на нишки, събиране на боклук, използване на памет и изтичане на памет, с поддръжка на локално и отдалечено профилиране чрез ssh тунелиране .

Ето бърз поглед върху резултатите от профилирането на паметта на сървърно приложение на Tomcat:

Профилиране на паметта на YourKit Java Profiler на сървърното приложение Tomcat

YourKit също е полезен в онези времена, когато искаме да профилираме изключения . Можем лесно да разберем какви видове изключения са били хвърлени и колко пъти е възникнало всяко изключение.

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

Фигура 5 показва пример за интерфейс за профилиране на нишки:

Фигура 5. Интерфейс за профилиране на нишки YourKit Java Profiler

Също така можем да профилираме SQL и NoSQL повиквания към база данни с YourKit. Той дори предоставя изглед за действителните заявки, които са били изпълнени.

Въпреки че това не е техническо съображение, разрешителният лицензионен модел на YourKit го прави добър избор за многопотребителски или разпределени екипи, както и за покупки с един лиценз.

4. Java VisualVM

Java VisualVM е опростен, но стабилен инструмент за профилиране за Java приложения. По подразбиране този инструмент е в комплект с Java Development Kit (JDK). Неговата работа разчита на други самостоятелни инструменти, предоставени в JDK, като JConsole , jstat , jstack , jinfo и jmap .

По-долу можем да видим прост интерфейс за преглед на текуща сесия за профилиране, използваща Java VisualVM:

Профилиране на локално приложение за сървър на Tomcat на Java VisualVM

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

Java VisualVM поддържа локално и дистанционно профилиране , както и профилиране на паметта и процесора. Свързването с отдалечени приложения изисква предоставяне на идентификационни данни (име на хост / IP и парола, ако е необходимо), но не осигурява поддръжка за ssh тунелиране . Можем също така да активираме профилиране в реално време с незабавни актуализации (обикновено на всеки 2 секунди).

По-долу можем да видим перспективата на паметта на Java приложение, профилирано с Java VisualVM:

Хистограма на купчина памет на Java VisualVM

С функцията за моментна снимка на Java VisualVM можем да правим моментни снимки на профилиращи сесии за по-късен анализ .

5. Профилатор на NetBeans

NetBeans Profiler е в комплект с IDE на NetBeans с отворен код на Oracle .

Въпреки че този профилатор споделя много прилики с Java VisualVM , това е добър избор, когато искаме всичко да е обвито в една програма (IDE + Profiler).

Всички други обсъдени по-горе профили предлагат приставки за подобряване на интеграцията на IDE.

По-долу екранната снимка показва пример за интерфейса на NetBeans Profiler:

Интерфейс за телеметрия Netbeans Profiler

Netbeans Profiler също е добър избор за леки разработки и профилиране . NetBeans Profiler осигурява един прозорец за конфигуриране и управление на сесията за профилиране и показване на резултатите. Това дава уникална характеристика да знаете колко често се случва събирането на боклука .

6. Други твърди профили

Някои почетни споменавания тук са Java Mission Control, New Relic и Prefix (от Stackify) - те имат по-малък пазарен дял като цяло, но определено заслужават да бъдат споменати. Например, Префиксът на Stackify е отличен лек инструмент за профилиране, подходящ за профилиране не само на Java приложения, но и на други уеб приложения.

7. Заключение

В това описание ние обсъдихме профилирането и Java Profilers. Разгледахме характеристиките на всеки Profiler и това, което информира потенциалния избор на един над друг.

Налични са много профайлъри на Java, като някои имат уникални характеристики. Изборът на кой Java профилатор да се използва, както видяхме в тази статия, зависи най-вече от избора на инструменти на разработчика, нивото на необходимия анализ и характеристиките на профилиращия инструмент.