Π Π°Π·Π½ΠΎΠ΅

Java ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€: Do It Yourself Java Profiling / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Do It Yourself Java Profiling / Π₯Π°Π±Ρ€

На ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΉ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Appication Developer Days, Π ΠΎΠΌΠ°Π½ Π•Π»ΠΈΠ·Π°Ρ€ΠΎΠ² (elizarov) рассказал, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚.Π΅. ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π΅Π· использования спСциализированных инструмСнтов, Π±ΡƒΠ΄ΡŒ ΠΎΠ½ΠΈ Ρ…ΠΎΡ‚ΡŒ вСндорскиС, Ρ…ΠΎΡ‚ΡŒ open-source.ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ малоизвСстныС, встроСнныС Π² JVM возмоТности (threaddumps, java agents, bytecode manipulation), ΠΈ быстро ΠΈ эффСктивно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ постоянно Π΄Π°ΠΆΠ΅ Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΉ систСмС.Π’ΠΎΡ‚ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π° (Ρ‚ΡƒΡ‚ ΠΎΠ½ΠΎ косолапо эмбСдится, Π½ΠΎ ΠΎΠ½ΠΎ 1280×720, всС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎ):

Но я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ‚Π°ΠΊΠΆΠ΅, Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° 70K тСкста ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ-стСнограммы ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ, составлСнной ΠΌΠ½ΠΎΠΉ ΠΏΠΎ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ слайдам.
Π£ мСня сСгодня Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΏΡ€ΠΎ Β«Π‘Π΄Π΅Π»Π°ΠΉ сСбС сам ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π―Π²Π΅Β». Π‘Π»Π°ΠΉΠ΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π° английском, Π΄ΠΎΠΊΠ»Π°Π΄ я Π±ΡƒΠ΄Ρƒ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° русском. Π‘Π»Π°ΠΉΠ΄ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ-ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, поэтому я Π±ΡƒΠ΄Ρƒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΏΡ€ΠΎΡΠΊΠ°ΠΊΠΈΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ Π½Π° вопросы, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Π³Π΄Π΅-Ρ‚ΠΎ Π² сСрСдинС. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ, Ссли захочСтся Π²Π΄Ρ€ΡƒΠ³ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, ΠΈ Π΄Π°ΠΆΠ΅ мСня ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ. Π― Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ освСщу Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ интСрСсно, Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Ρƒ просто Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π» Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

Π”ΠΎΠΊΠ»Π°Π΄ основан Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅, ΠΌΡ‹ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ большС дСсяти Π»Π΅Ρ‚ занимаСмся созданиСм слоТных, ΠΎΡ‡Π΅Π½ΡŒ высоконагруТСнных финансовых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с большими массивами Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² сСкунду, c дСсятками тысяч ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ½Π»Π°ΠΉΠ½, ΠΈ Ρ‚Π°ΠΌ, ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, всСгда Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ прилоТСния. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния β€” Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ любой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, оптимизация Π±Π΅Π· профилирования Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. Π’Ρ‹ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΡƒΠ·ΠΊΠΈΠ΅ мСста, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, это постоянный Ρ†ΠΈΠΊΠ». ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΎΠΊΠ»Π°Π΄ называСтся Β«Do It Yourself Java ProfilerΒ», Π·Π°Ρ‡Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ самому? Π•ΡΡ‚ΡŒ ΠΆΠ΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” собствСнно ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты.

Но Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° со сторонним инструмСнтом. Π’Ρ‹ просто ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ сообраТСниям β€” надСТности ΠΈΠ»ΠΈ бСзопасности, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТности Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сторонний инструмСнт Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. А ΠΊ соТалСнию, Ρ‡Π°ΡΡ‚Π΅Π½ΡŒΠΊΠΎ приходится ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° тСстовой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π½ΠΎ ΠΈ Π½Π° ΠΆΠΈΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΈ Π½Π΅ всСгда для высоконагруТСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ рСсурсы ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΡƒΡŽ копию систСмы ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. А ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡƒΠ·ΠΊΠΈΠ΅ мСста ΠΌΠΎΠ³ΡƒΡ‚ выявится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ большой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ спСцифичных условиях. Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, Π½ΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ. Какой ΠΈΠΌΠ΅Π½Π½ΠΎ шаблон Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ для Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΎΡΠ²ΠΈΠ»Π°ΡΡŒ β€” поэтому ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ часто Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΆΠΈΠ²ΡƒΡŽ систСму.

ΠœΡ‹, ΠΊΠΎΠ³Π΄Π° пишСм финансовыС прилоТСния, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π·Π°Π΄Π°Ρ‡Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы. И ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ Β«Π±Π°Π½ΠΊΠΈΒ», Π³Π΄Π΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ваши дСньги, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ часами нСдоступны. ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ брокСрскиС систСмы ΠΎΠ½Π»Π°ΠΉΠ½-Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»ΠΈ, Π³Π΄Π΅ постоянно 24Γ—7 Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ систСм, это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΈΡ… качСств, ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

И я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ вся индустрия Π·Π°Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π°, ΠΈ ΠΌΡ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сторонний ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ систСмС.

Но ΠΈ инструмСнты Ρ‡Π°ΡΡ‚Π΅Π½ΡŒΠΊΠΎ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹. Π”Π°, Π΅ΡΡ‚ΡŒ докумСнтация, которая описываСт Β«Ρ‡Ρ‚ΠΎΒ», Π½ΠΎ ΠΎΠ½Π° Π½Π΅ описываСт, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ достаСт эти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΈ Π½Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ собствСнно намСрял.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π°ΠΆΠ΅ Ссли инструмСнт с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, это Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ мСняСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ этого ΠΊΠΎΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎ, Π²Ρ‹ ΡƒΠ±ΡŠΠ΅Ρ‚Π΅ ΠΊΡƒΡ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Π½Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡΡΡŒ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Π° Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ самому, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ приятнСй. Π’ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ? ЕстСствСнно, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ инструмСнт часто, Ρ‚ΠΎ стоит Π΅Π³ΠΎ ΡƒΡ‡ΠΈΡ‚ΡŒ. Если Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ любимой Π²Π°ΠΌΠΈ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π²Ρ‹ Π΅Π΅ Π·Π½Π°Π΅Ρ‚Π΅ вдоль ΠΈ ΠΏΠΎΠΏΠ΅Ρ€Π΅ΠΊ, ΠΈ это Π·Π½Π°Π½ΠΈΠ΅, СстСствСнно, окупаСтся Π²Π°ΠΌ сторицСй.

А Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π· Π² мСсяц, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π· Π² мСсяц Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π΄ΠΈ Π±Π°Π³Π° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ Π½Π΅ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ инструмСнта окупится. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Ссли Π½Π΅Ρ‚ ситуации, ΠΊΠΎΠ³Π΄Π° инструмСнт Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ Π² Ρ€Π°Π·Ρ‹ быстрСС.

ДСлая Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваши знания. НапримСр, Ρƒ вас Π΅ΡΡ‚ΡŒ знания языков программирования, своих инструмСнтов, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ, Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ, ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈΠ·ΡƒΡ‡ΠΈΠ² Ρ‚Π΅ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ, вмСсто изучСния Π½ΠΎΠ²ΠΎΠ³ΠΎ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎ Java? Ну ΠΌΠ°Π»ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ наша компания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Java, это Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ язык 2001 Π³ΠΎΠ΄Π° ΠΏΠΎ индСксу TIOBE, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для enterprise ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. А для Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Java β€” это managed язык, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Java дСлаСтся ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ. Π― Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, просто ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ профилирования, написав Π½Π΅ΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° Java. Π‘ΠΊΠ°ΠΆΡƒ ΠΎ возмоТностях Java-машин, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ расскаТу ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅, ΠΊΠ°ΠΊ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ. ΠœΡ‹ посмотрим сСгодня Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ CPU, Ρ‚Π°ΠΊ ΠΈ памяти. Π― расскаТду ΠΏΡ€ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ CPU. Π‘Π°ΠΌΡ‹ΠΉ простой способ, это просто Π²Π·ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΡƒΠ΄Π°, сколько, Ρ‡Π΅Π³ΠΎ, Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ сколько Ρ€Π°Π· вызываСтся, Ρ‚ΠΎ самый-самый простой способ: Π½Π΅ Π½Π°Π΄ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… инструмСнтов, Π½ΠΈΡ‡Π΅Π³ΠΎ β€” Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ просто нСсколько строчСк ΠΊΠΎΠ΄Π°.

Π’ Java Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция Β«currentTimeMillisΒ», которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя. МоТно Π΅Π΅ Π·Π°ΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π·Π°ΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π° дальшС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сколько Ρ€Π°Π· это сдСлано, суммарноС врСмя, минимальноС ΠΈ максимальноС врСмя, всС Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π‘Π°ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ простой способ. DIY Π² своСй максимальной простотС ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΈΠ·ΠΌΠ΅.

Как Π½ΠΈ странно, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ способ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, приносит ΠΊΡƒΡ‡Ρƒ ΠΏΠΎΠ»ΡŒΠ·Ρ‹ β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ быстр, ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΈ эффСктивСн. Когда этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для бизнСс-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” бизнСс-ΠΌΠ΅Ρ‚ΠΎΠ΄ большой, вызываСтся Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ часто, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎ Π½Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, написав этот ΠΊΠΎΠ΄, Ρ€Π°Π· ΡƒΠΆ Π²Ρ‹ Π΅Π³ΠΎ написали β€” ΠΎΠ½ становится Ρ‡Π°ΡΡ‚ΡŒΡŽ вашСго прилоТСния ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°. Π‘ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π½Π΅Π΅ любоС соврСмСнноС большоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ содСрТит интСрфСйсы управлСния, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ статистики, … ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния β€” это ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто хочСтся Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ сСбС Π²Ρ‹Π΄Π°Π²Π°Π»ΠΎ, просто ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ своСго Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°.

Π’ этом смыслС, Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ само сСбя ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ, являСтся Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ шагом. Π’Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» прилоТСния, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния становится Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°. ОсобСнно, Ссли Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ расставляСтС опрСдСлСния Π² Π²Π°ΡˆΠΈΡ… бизнСс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ эта информация Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ осмыслСнна. Бколько Ρ€Π°Π· ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ, сколько ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ собираСтС, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄ вашим ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ€ΡΡ‚ΡŒ количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², минимальноС врСмя, максимальноС врСмя, срСднСС ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ гистограммы распрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ‹ ΠΈ пСрсСнтили. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ исполнСния Π² ΠΊΠΎΠ΄Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΡ‚ΠΎ успСл Ρ€Π°Π·Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² зависимости ΠΎΡ‚ ΠΏΡƒΡ‚ΠΈ исполнСния, ΠΌΡ‹ записываСм Ρ€Π°Π·Π½ΡƒΡŽ статистику: ΠΊΠ°ΠΊ часто Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса ΠΏΠΎΠΏΠ°Π» Π² кСш, ΠΈ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ это заняло, ΠΈ ΠΊΠ°ΠΊ часто запросу ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π»Π΅Π·Ρ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ это заняло. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли Π²Ρ‹ этот ΠΊΠΎΠ΄ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ сами, собираСтС статистику, встраиваСтС сами Π² своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²Π°ΠΌ, ΠΊΠ°ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ занимаСтся Ρ†ΠΈΠΊΠ»ΠΎΠΌ профилирования-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ β€” Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ происходит? Π­Ρ‚Π° информация всСгда находится Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСго прилоТСния, ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΆΠΈΠ²ΠΎΠΉ систСмС. Π£ вас ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ дСнь, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ систСма Π½Π΅ Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Π»ΠΎΠ³Π°Ρ… эту статистику, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… сторонних инструмСнтов, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΠΊΠΎΠ΄Π° Π½Π° явС.


Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ€ΠΎΡ‡Π΅, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅?

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ прямой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡƒΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«currentTimeMillisΒ» Π½Π΅ быстрый, ΠΈ мСряСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² миллисСкундах. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‚ΠΎ достаточно быстро ΠΌΠΎΠΆΠ½ΠΎ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Java-класс Β«AtomicLongΒ». Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, внося ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ вас ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ дСсятков тысяч Π²Ρ‹Π·ΠΎΠ² Π² сСкунду, Π½Π΅ сильно искаТая Ρ€Π°Π±ΠΎΡ‚Ρƒ самого прилоТСния. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Π΅ Π·Π°ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ врСмя выполнСния? Π—Π°ΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” это ΠΎΡ‡Π΅Π½ΡŒ слоТная Ρ‚Π΅ΠΌΠ°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΎΠ½Π° Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Java Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«systemNanoTimeΒ», ΠΎΠ½ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΎΠ½ сам ΠΏΠΎ сСбС ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ, ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ быстроС слоТно Π·Π°ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ.

ЕдинствСнный Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ β€” это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, для x86 процСссора Π΅ΡΡ‚ΡŒ такая Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ инструкция rdtsc, которая Π²ΠΎΠ·Ρ€Π°Ρ‰Π°Π΅Ρ‚ счСтчик количСства Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора. ΠΠ°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊ Π½Π΅ΠΉ доступа Π½Π΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° C однострочный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Β«rdtscΒ», Π° дальшС ΡΠ»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с Java-ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Java. Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² Π²Π°ΠΌ Π·Π°ΠΉΠΌΠ΅Ρ‚ сто Ρ‚Π°ΠΊΡ‚ΠΎΠ², ΠΈ Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ кусок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ тысячу-Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π°ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ это осмыслСнно, Ссли Ρƒ вас ΠΈΠ΄Π΅Ρ‚ оптимизация ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ машинного Ρ‚Π°ΠΊΡ‚Π°, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, «плюс-минус», «быстрСС-ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅Β», ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅. Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΈΠΉ случай, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚.

Π§Π°Ρ‰Π΅ всСго, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… кусках ΠΊΠΎΠ΄Π°, ΠΈ Π±ΠΎΠ»Π΅Π΅ часто Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся «сСмплированиС». ВмСсто Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°ΠΌΠ΅Ρ€ΠΎΠ², сколько Ρ€Π°Π· ΠΈ Ρ‡Π΅Π³ΠΎ вызываСтся, Π²Ρ‹ пСриодичСски Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, смотритС, Π³Π΄Π΅ ΠΎΠ½Π° исполняСтся, Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Ρ€Π°Π· Π² сСкунду, ΠΈΠ»ΠΈ Ρ€Π°Π· Π² Π΄Π΅ΡΡΡ‚ΡŒ сСкунд. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, Π³Π΄Π΅ происходит исполнСниС, ΠΈ считаСтС, Π² ΠΊΠ°ΠΊΠΈΡ… мСстах Π²Ρ‹ застаСтС свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ часто. Если Ρƒ вас Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ строчка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ всС, ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ 90% своСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ†ΠΈΠΊΠ», Π° Ρ‚Π°ΠΌ, Π² Π³Π»ΡƒΠ±ΠΈΠ½Π΅, какая-Ρ‚ΠΎ строчка, Ρ‚ΠΎ скорСС всСго, ΠΏΡ€ΠΈ остановкС исполнСния Π²Ρ‹ Π΅Π΅ Π² этой строчкС ΠΈ застанСтС.

Π’Π°ΠΊΠΎΠ΅ мСсто Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ называСтся «горячСй Ρ‚ΠΎΡ‡ΠΊΠΎΠΉΒ». Π­Ρ‚ΠΎ всСгда Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π§Ρ‚ΠΎ классно β€” Π΅ΡΡ‚ΡŒ встроСнная фукнция ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«thread dumpΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°ΠΌΠΏ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ Windows ΠΎΠ½Π° дСлаСтся ΠΏΡƒΡ‚Π΅ΠΌ наТатия CTRL-Break Π½Π° консоли, Π° Π½Π° Linux ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡŽΠ½ΠΈΠΊΡΠ°Ρ… это дСлаСтся посылкой Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ сигнала, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Β«kill -3Β». Π’ этом случаС, Java-машина Π½Π° консоль Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС состояния всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². И Ссли Ρƒ вас Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅ΡΡ‚ΡŒ горячСС мСсто Π² ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎ скорСС всСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΌ ΠΈ застанСтС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° Ρƒ вас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π΅ Π½Π°Π΄ΠΎ Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΡƒ, Π½Π΅ Π½Π°Π΄ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚, сдСлайтС Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ thread dump, ΠΈ посмотритС. Если Ρƒ вас ΠΎΠ΄Π½ΠΎ горячСС мСсто, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ всС врСмя, Π²Ρ‹ Π² thread dump ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ эту строчку, Π² своСй любимой срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π±Π΅Π· использования ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сторонних, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ этот ΠΊΠΎΠ΄, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ β€” Π»ΠΈΠ±ΠΎ ΠΎΠ½ слишком часто вызываСтся, Π»ΠΈΠ±ΠΎ ΠΎΠ½ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, дальшС ΡƒΠΆΠ΅ Ρ€Π°Π·Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ², оптимизация, Π»ΠΈΠ±ΠΎ дальнСйшСС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ Π² соврСмСнных Java-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Β«jstackΒ», Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ thread dump.

Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½ thread dump, сдСлайтС нСсколько thread dumpΠΎΠ². Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π»ΠΎΠ²ΠΈΡ‚, посмотритС Π΅Ρ‰Π΅ Π½Π° ΠΏΠ°Ρ€Ρƒ-Ρ‚Ρ€ΠΎΠΉΠΊΡƒ. ΠœΠΎΠΆΠ΅Ρ‚ Ρƒ вас Π² горячСй Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π΅ сто ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚, Π° 50%. Π‘Π΄Π΅Π»Π°Π² нСсколько thread dumpΠΎΠ², Π²Ρ‹ явно Π² Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· этих ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², достанСтС ваш ΠΊΠΎΠ΄ ΠΈΠ· горячСй Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈ Π³Π»Π°Π·ΠΊΠ°ΠΌΠΈ посмотритС Ρ‚Π΅ мСста, Π³Π΄Π΅ Π²Ρ‹ застали ваш ΠΊΠΎΠ΄. Π­Ρ‚Ρƒ идСю ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ дальшС. МоТно, запустив ява-ΠΌΠ°ΡˆΠΈΠ½Ρƒ, ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ», ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ thread dump ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ Ρ‚Ρ€ΠΈ сСкунды. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ спокойно Π½Π° ΠΆΠΈΠ²ΠΎΠΉ систСмС, Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ риска Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½Π΅ΠΉ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сам сбор thread dump досточно быстрая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ силы 100 миллисСкунд, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ большом количСствС Ρ‚Ρ€Π΅Π΄ΠΎΠ².

А Ссли Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½Π° явС, Ρ‚ΠΎ скорСС всСго ваша систСма Π½Π΅ hard real time, ΠΈ Π²Π°ΠΌ Ρ‚Π°ΠΌ наносСкунды Π½Π΅ Π²Π°ΠΆΠ½Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ пСриодичСски встрСчаСтся сборка мусора ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’.Π΅. Π²Π°ΠΌ лишнСС засыпаниС систСмы Π½Π° сто миллисСкунд катастрофы Π½Π΅ создаСт.

И Π΄Π°ΠΆΠ΅ Π² нашСй, финансовой области, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ пишСм, ΠΌΡ‹ пишСм всС-Ρ‚Π°ΠΊΠΈ для людСй, с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ люди, Π΄Π°, Ρ‚Π°ΠΌ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² сСкунду, Π΄Π°, Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ (это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ история), Π½ΠΎ Ρ‡Π°Ρ‰Π΅ всСго Π½Π° эти ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ смотрит Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ плюс-минус 100 миллисСкунд Π² Π³Π»Π°Π·Π° Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚. Π§Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚, Ссли Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° двСсти миллисСкунд, это ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ замСтная для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, Π½ΠΎ сто миллисСкунд β€” Π½Π΅Ρ‚.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎ Π»ΠΈΡˆΠ½ΠΈΡ… ста миллисСкундах, ΠΈ Ρ€Π°Π· Π² Ρ‚Ρ€ΠΈ сСкунды Π΄Π΅Π»Π°Ρ‚ΡŒ thread dump, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСзопасно, Π΄Π°ΠΆΠ΅ Π½Π° ΠΆΠΈΠ²ΠΎΠΉ систСмС. ΠŸΡ€ΠΈ этом thread dump, это Ρ‡Π°ΡΡ‚ΡŒ java-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ…ΠΎΡ€ΠΎΡˆΠΎ оттСстированная β€” я Π·Π° вСсь свой ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ Π²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° Java-машинС thread dump сдСлала с Π½Π΅ΠΉ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ΅.

Π’.Π΅. это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСзопасный инструмСнт профилирования ΠΆΠΈΠ²Ρ‹Ρ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… систСм. ПослС этого, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ„Π°ΠΉΠ» thread dump, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π³Π»Π°Π·ΠΊΠ°ΠΌΠΈ, Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСслоТный кусок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚, считаСт ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ статистики β†’ хотя Π±Ρ‹ Ρ‚ΡƒΠΏΠΎ, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΡΠ²ΠΈΠ»ΠΈΡΡŒ ΠΈ сколько Ρ€Π°Π·, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ состоянии Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. ΠŸΡ€ΠΈ этом Ссли стандартныС инструмСнты профилирования, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ смотрят Π½Π° состояниС ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Java-машина (Β«RUNNABLEΒ»), Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, вашС состояниС Π½ΠΈ ΠΎ Ρ‡Π΅ΠΌ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΠΌΠΈβ€¦ ΡΠ΅Ρ‚ΡŒΡŽ, Ρ‚ΠΎ ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти, ΠΏΡ€ΠΈ этом java-машина Π΅Π³ΠΎ считаСт Β«RUNNABLEΒ», ΠΈ Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ смоТСтС ΠΏΠΎΠ½ΡΡ‚ΡŒ β€” ΠΊΠ°ΠΊΠΈΠ΅ Ρƒ вас Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΆΠ΄ΡƒΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ сСти. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Π²Ρ‹ сами Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ стСки, β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Π²Ρ‹-Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚ это β€” Π²Ρ‹Π·ΠΎΠ² Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² стСкС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ вошли Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сколько ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° самом Π΄Π΅Π»Π΅ CPU Π½Π΅ ΠΆΡ€Π΅Ρ‚, хотя java-машина Π΄ΡƒΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Β«RUNNABLEΒ». Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, thread dump ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² прилоТСния, Π² Java Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄

Thread.getAllStackTraces 

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ stacktrace ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этого прилоТСния, ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вашим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, с ΡƒΠΆΠ΅ встроСнным ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π’Π΅ΠΌ самым, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ постоянный ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ смоТСтС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ вашСго прилоТСния. Но Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Java-ΠΌΠ°ΡˆΠΈΠ½Ρƒ проситС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ thread-dump, ΠΎΠ½Π° Π½Π΅ просто процСсс останавливаСт, ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ стСк, ΠΎΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„Π»Π°ΠΆΠΎΠΊ, Ρ‡Ρ‚ΠΎ ява-машинС Π½Π°Π΄ΠΎ Π±Ρ‹ остановится Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ бСзопасном мСстС. «БСзопасноС мСсто» β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ мСста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ расставляСт компилятор ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ, Π³Π΄Π΅ Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ состояниС, Π³Π΄Π΅ понятно, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π΅ Π² рСгистрах, понятна Ρ‚ΠΎΡ‡ΠΊΠ° исполнСния, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Если Π±Ρ€Π°Ρ‚ΡŒ кусок ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚ΠΎ Ρ‚Π°ΠΌ Β«safe pointΒ» ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ заинлайнится hotspot-ΠΎΠΌ, ΠΈ savepoint-ΠΎΠ² Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² thread dumpe ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ строчку β€” это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ это горячая строчка вашСго ΠΊΠΎΠ΄Π°, это просто блиТайший savepoint ΠΊ горячСй Ρ‚ΠΎΡ‡ΠΊΠ΅. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Β«CTRL-BREAKΒ», Java всСм ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ выставляСт Ρ„Π»Π°ΠΆΠΎΠΊ Β«ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° блиТайшСм savepointΠ΅Β», ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ, Java-машина Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚, Π² ΠΊΠ°ΠΊΠΎΠΌ состоянии ΠΎΠ½ΠΈ это Π΄Π΅Π»Π°ΡŽΡ‚. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ памяти, ΠΊΠ°ΠΊ это дСлаСтся.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ Java-машина. Π•ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ инструмСнт jmap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ гистограмму Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ Ρƒ вас Π·Π°Π±ΠΈΡ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ сколько памяти Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚. Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρƒ вас происходит, ΠΈ Ρ‡Π΅ΠΌ Π·Π°Π±ΠΈΡ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Ссли Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅ всСго Π²Ρ‹ сразу Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΈ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΈΡ‰Π° для дальнСйшСй ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ вашСго использования памяти. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Π΄Π°ΠΆΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, находятся Π² мусорС.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρƒ jmap Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ опция Β«liveΒ», которая ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ гистограмму Π΄Π΅Π»Π°Π΅Ρ‚ сборку мусора, оставляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого строит гистограмму.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ с этой ΠΎΠΏΡ†ΠΈΠ΅ΠΉ, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ, ΠΆΠΈΠ²ΡƒΡŽ систСму Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ с ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°ΠΌΠΈ памяти, Π·Π°ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСльзя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сборка мусора систСмы, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ с дСсятком Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ памяти Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ дСсяток-Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСкунд, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСприСмлимо… Π² любой систСмС, Ссли ваша систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ людьми, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ систСма дольшС Ρ‚Ρ€Π΅Ρ… сСкунд Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚, считаСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° зависла. НСльзя ΠΆΠΈΠ²ΡƒΡŽ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ с Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ систСму ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ дольшС Ρ‡Π΅ΠΌ Π½Π° сСкунду, Π½Π° самом Π΄Π΅Π»Π΅. Π”Π°ΠΆΠ΅ сСкунда ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ Π·Π°ΠΌΠ΅Ρ‚Π½Π°, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ катастрофа, Π½ΠΎ Ссли Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ остановит Π½Π° 10 сСкунд β€” Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ катастрофа. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ часто приходится Π΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΆΠΈΠ²Ρ‹Ρ… систСмах jmap-ΠΎΠ² Ρ‚Π΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ, ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ, Π½Π΅Π²Π°ΠΆΠ½ΠΎ, мусор это ΠΈΠ»ΠΈ Π½Π΅Ρ‚.
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ Java-машин. НапримСр, Ρƒ Java-машин ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ гистограмму классов, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ thread dump β†’ Β«PrintClassHistogramΒ».

Π―Π²Π°-ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ исчСрпании памяти Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ своС состояниС Π½Π° диск. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, люди Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° заканчиваСтся ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ. Никто Π½Π΅ занимаСтся ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π° Π²ΠΎΡ‚ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ памяти Π½Π΅ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ, ΠΎΠ½Π° Π²Ρ‹Π»Π΅Ρ‚Π°Π΅Ρ‚, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π±Ρ‹ Ρ‚Π°ΠΊ ΡΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ это ΠΎΠΏΡ†ΠΈΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ всСгда ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ. Π’ΠΎΠ³Π΄Π° Π² ΠΏΠ»ΠΎΡ…ΠΎΠΌ случаС Java-машина Π²Π°ΠΌ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π΄Π°ΠΌΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΌ, Π½Π΅ Π½Π° ΠΆΠΈΠ²ΠΎΠΉ систСмС, Π»ΡŽΠ±Ρ‹ΠΌΠΈ инструмСнтами ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈ этом, этот Π΄Π°ΠΌΠΏ ΠΌΠΎΠΆΠ½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Π·ΡΡ‚ΡŒ с Java-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‚Π΅ΠΌ ΠΆΠ΅ jmap-ΠΎΠΌ, с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Β«-dumpΒ», Π½ΠΎ это, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, останавливаСт Java-ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π½Π° Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя, Π½Π° ΠΆΠΈΠ²ΠΎΠΉ систСмС Π²Ρ‹ это вряд Π»ΠΈ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΈΠ· Π·Π°Π»Π°: Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ свойство, Ρ‡Ρ‚ΠΎ этот Β«HeapDumpOutOfMemoryΒ» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ.

Π”Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ. Β«HeapDumpOutOfMemoryΒ» ΠΎΡ‡Π΅Π½ΡŒ полСзная опция, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ хотя ΠΎΠ½Π° Β«-XXΒ», Π½Π΅ Π½Π°Π΄ΠΎ этих ΠΎΠΏΡ†ΠΈΠΉ Π±ΠΎΡΡ‚ΡŒΡΡ, хотя этот Β«XXΒ» ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ… ΠΌΠ΅Π³Π°ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ это Π½Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ, это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ production-ΠΎΠΏΡ†ΠΈΠΈ ява-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΎΠ½ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅, Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΆΠΈΠ²ΠΎΠΉ, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ систСмС.

Π­Ρ‚ΠΎ Π½Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ! Π’ java-машинС Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π½Π΅ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ Π½Π΅ зависит ΠΎΡ‚ числа X-ΠΎΠ².

Π Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΈΠ· Π·Π°Π»Π°: Π­Ρ‚Π° опция ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ дампы…

Ну, Π² java-машинС Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ Π±Π°Π³ΠΈ, всС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, … Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ исчСрпания памяти, я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π½Π° этом ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Ρƒ нас Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ°Π»ΠΎ. Π― Ρ…ΠΎΡ‡Ρƒ остановится Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅, Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ врСмя, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ выдСлСния памяти.

Одно Π΄Π΅Π»ΠΎ β€” Ρ‡Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ занята, ΠΊΠ°ΠΊ Π²Ρ‹ Π΅Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. Если Ρƒ вас Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ излишнСС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ памяти, Ρ‚.Π΅. Π²Ρ‹ выдСляСтС, … Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π±Ρ‹Π²Π°Π΅Ρ‚Π΅, ΠΎΠ½ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² мусор, ΠΈ garbage collector ΠΏΠΎΡ‚ΠΎΠΌ Π΅Π³ΠΎ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚. И Ρ‚Π°ΠΊ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ снова ΠΈ снова, ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π±Ρ‹ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° с этим … Π½ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ ΠΏΠΎ CPU это мСсто ΠΊΠΎΠ΄Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сама опСрация выдСлСния Π² Java-машинС памяти, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ фантастичСски быстро, быстрСС, Ρ‡Π΅ΠΌ Π² любом Π½Π΅-managed языкС, C/C++, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Java Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти это банально ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ указатСля. ВсС. Π­Ρ‚ΠΎ нСсколько ассСмблСрных инструкций, всС ΠΎΡ‡Π΅Π½ΡŒ быстро происходит. Она ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΡƒΠ»Π΅Π½Π°, всС ΡƒΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ. Π’Ρ‹ этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ горячих Ρ‚ΠΎΡ‡Π΅ΠΊ вашСго ΠΊΠΎΠ΄Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ β€” ΠΎΠ½ΠΎ Π½Π΅ высвСтится Ρƒ вас Π½ΠΈΠΊΠΎΠ³Π΄Π°, Π½ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ thread dumpe, Π½ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅, Ρ‡Ρ‚ΠΎ это Ρƒ вас горячая Ρ‚ΠΎΡ‡ΠΊΠ°. Π₯отя Ρƒ вас это всС Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΡ€Π°Ρ‚ΡŒ вашС врСмя, Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСго прилоТСния β€” ΠΏΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ, сборщик мусора Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот мусор ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ смотритС, Π½Π° Ρ‚ΠΎ, сколько ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ Π½Π° сборку мусора.

Π­Ρ‚ΠΎ полСзная опция Β«-verbose:gcΒ», Β«+PrintGCΒ», Β«+PrintGCDetailsΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π²Π°ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ вашСго прилоТСния ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° сборку мусора. Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° сборку мусора ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ сущСствСнный ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹ Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ выдСляСтС памяти, Π²Ρ‹ это мСсто Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ, ΠΊΡ‚ΠΎ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ. Как ΠΈΡΠΊΠ°Ρ‚ΡŒ? Π•ΡΡ‚ΡŒ встроСнный Π² Java-ΠΌΠ°ΡˆΠΈΠ½Ρƒ способ, ΠΊΠ»ΡŽΡ‡ΠΈΠΊ Β«-XaprofΒ». Он Π²Π°ΠΌ, ΠΊ соТалСнию, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ процСсса, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ allocation profile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π΅ ΠΎ содСрТимом памяти, Π° ΠΎ статистикС выдСляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β†’ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΊΠ°ΠΊ часто Π²Ρ‹Π΄Π΅Π»ΡΠ»ΠΈΡΡŒ.

Если Ρƒ вас это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ часто происходит, Π²Ρ‹ скорСС всСго ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Π·Π°Π²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто выдСляСтся. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сразу ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Β«aprofΒ» β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ сразу Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Но Π½Π΅ Ρ„Π°ΠΊΡ‚. ΠœΠΎΠΆΠ΅Ρ‚ получится ситуация, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ выдСлСния большого количСства массивов character-ΠΎΠ², ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ string-ΠΎΠ², ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, ΠΈ нСпонятно Π³Π΄Π΅.

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ вас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ подозрСния β€” Π³Π΄Π΅. ΠœΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π΅Π΄Π°Π²Π½Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, это ΠΌΠΎΠ³Π»ΠΎ внСсти. Π’ ΠΊΠΎΠ½Ρ†Π΅-ΠΊΠΎΠ½Ρ†ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ мСстС, Π³Π΄Π΅ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ слишком часто, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρƒ ΠΆΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ измСнСрСния ΠΊΠΎΠ΄Π° Π² atomiс longΠ°Ρ…, посчитайтС, сколько Ρ€Π°Π· Π² этом мСстС происходит Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ β€” посмотритС статистику, ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ мСста Π²Ρ‹ сами смоТСтС ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΠΉΡ‚ΠΈ.

А Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Ρƒ вас Π½Π΅Ρ‚ ΠΈΠ΄Π΅ΠΈ, Π³Π΄Π΅ это происходит? Ну Π½Π°Π΄ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сбор статистики Π²ΡΡŽΠ΄Ρƒ, ΠΏΠΎ всСм мСстам, Π³Π΄Π΅ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ. Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π·Π°Π΄Π°Ρ‡ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ аспСктно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ прямоС использованиС манипуляций Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ.

Π― сСйчас Π·Π° ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ врСмя ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ остановится ΠΊΠ°ΠΊ Ρ€Π°Π· Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ манипуляции Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ, которая ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ Ρ‚ΠΈΠΏΠ° Β«Π²ΠΎΡ‚ я Ρ…ΠΎΡ‡Ρƒ Π²ΠΎ всСх мСстах, Π³Π΄Π΅ выдСляСтся массив, ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сколько Ρ€Π°Π· Π² этом мСстС это происходит, ΠΏΠΎ всСму своСму ΠΊΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎ самоС мСсто, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ массивов int-ΠΎΠ² Π²Ρ‹Π΄Π΅Π»ΡΡŽΒ». Π’.Π΅. я Π²ΠΈΠΆΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ выдСляСтся, Π½ΠΎ я просто Ρ…ΠΎΡ‡Ρƒ Π½Π°ΠΉΡ‚ΠΈ Π³Π΄Π΅. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠΌ позволяСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эти Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΎΠ½Π° позволяСт Π»ΡŽΠ±Ρ‹Π΅ измСнСния, Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅, Π² ΠΊΠΎΠ΄ Π²Π½ΠΎΡΠΈΡ‚ΡŒ, ΡƒΠΆΠ΅ послС Π΅Π³ΠΎ компиляции. Π’Π΅ΠΌ самым, этот способ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Если Π² Π½Π°Ρ‡Π°Π»Π΅ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ часто ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ вашСго Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°, Ρ‚ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… строк Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ. Π’ этом случаС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ такая Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΊΠ°ΠΊ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с посткомпиляциСй Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π»Π΅Ρ‚Ρƒ, с ΠΊΠΎΠ΄ΠΎΠΌ. Π‘Π°ΠΌΡ‹ΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я знаю, это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡ΠΊΡƒ ASM, ObjectWebΠΎΠ²ΡΠΊΡƒΡŽ. Π­Ρ‚ΠΎ open-source Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая позволяСт ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ манипуляциСй Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ ΠΎΠ½Π° фантастичСски быстрая β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Π»Π΅Ρ‚Ρƒ, Π½Π΅ сильно замСдляя врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ прилоТСния.

ASM устроСн ΠΎΡ‡Π΅Π½ΡŒ просто. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ класс ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ class-reader, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ .class-Ρ„Π°ΠΉΠ»Ρ‹, ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚ΠΈΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ шаблон Visitor, Π² Π½Π°Π±ΠΎΡ€ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²ΠΈΠ΄Π° «я Π²ΠΈΠΆΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Β», «я Π²ΠΈΠΆΡƒ ΠΏΠΎΠ»Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ полями Π² этом классС» ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Когда ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Β«MethodVisitorΒ» ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ½ Ρ‚Π°ΠΌ Π²ΠΈΠ΄ΠΈΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄.

А ΠΏΠΎΡ‚ΠΎΠΌ Π΅ΡΡ‚ΡŒ, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, такая ΡˆΡ‚ΡƒΠΊΠ°, ΠΊΠ°ΠΊ Β«ClassWriterΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ класс Π² массив Π±Π°ΠΉΡ‚ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ ява-машинС. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ASM-Π°, ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ всС выдСлСния массивов… Π²-ΠΎΠ±Ρ‰Π΅ΠΌ, это дСлаСтся ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎ. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ всСго ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΡƒ классов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свой класс-Π°Π΄Π°ΠΏΡ‚Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠΎΠ³Π΄Π° Π΅ΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ свой собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄-visitor, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ происходит.

А ΠΊΠΎΠ³Π΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅ΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚, Π΅ΡΡ‚ΡŒ цСлочислСнная инструкция с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ выдСлСния массива (Β«NEWARRAYΒ»), Ρ‚ΠΎ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ … Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Ρ‹ Π² восходящий ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ всС. И Π²Ρ‹ отслСдили всС мСста, Π³Π΄Π΅ Ρƒ вас Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ массивы, ΠΈ помСняли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π”Π°Π»ΡŒΡˆΠ΅ β€” Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ эти измСнСния Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° Π»Π΅Ρ‚Ρƒ.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ скомпилированных классов β€” Ρ‚ΠΎ это Π»Π΅Π³ΠΊΠΎ β†’ Π²Ρ‹ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ этим инструмСнтом, ΠΈ всС.

Если Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° Π»Π΅Ρ‚Ρƒ, Ρ‚ΠΎ Π² java-машинС Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ опция β€” javaagent. Π’Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ jar-Ρ„Π°ΠΉΠ», Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² манифСстС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Β«Premain-ClassΒ», ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚Π°ΠΌ имя своСго класса. ΠŸΠΎΡ‚ΠΎΠΌ … ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«premainΒ» ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, ΠΈ Ρ‚Π΅ΠΌ самым, Π²Ρ‹ Π΅Ρ‰Π΅ Π΄ΠΎ запуска основного ΠΊΠΎΠ΄Π°, c main-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° interface instrumentation. Π­Ρ‚ΠΎΡ‚ интСрфСйс Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΠΎΠ½ позволяСт Π²Π°ΠΌ, Π½Π° Π»Π΅Ρ‚Ρƒ, ΠΌΠ΅Π½ΡΡ‚ΡŒ классы Π² java-машинС. Он позволяСт Π²Π°ΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой собствСнный class-file трансформСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Java-машина Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ класса.

И Π²Ρ‹ смоТСтС классы ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ. Π’.Π΅. Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° самом Π΄Π΅Π»Π΅ Π»Π΅ΠΆΠ°Ρ‚, Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ObjectWebASM, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π½Π° лСту… ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт Ρ‚Π°ΠΊΠΎΠ³ΠΎ профилирования Π½Π° ΠΊΠΎΠ»Π΅Π½ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ конкрСтная Π·Π°Π΄Π°Ρ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ скаТу, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ профилирования Π²Π»Π°Π΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ инструмСнтом, достаточно Π·Π½Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π·Π½Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ ява-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΈ Π·Π½Π°Ρ‚ΡŒ стандатныС ява-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎΡ‚ ΠΆΠ΅ javalang-инструмСнт. Π­Ρ‚ΠΎ позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ число спСцифичных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ. ΠœΡ‹ Π·Π° Π΄Π΅ΡΡΡ‚ΡŒ Π»Π΅Ρ‚ Ρƒ сСбя Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ нСсколько Π΄ΠΎΠΌΠΎΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Ρ… инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ спСцифичныС Π½Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ спСцифичныС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ. Начиная с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ появился развСсистый, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ простой инструмСнт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ thread dump, ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΠΎ Π½ΠΈΠΌ статистику, это Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ простая ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ инструмСнтом. Классик Π½Π° нСсколько страничСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСт статистику ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π΅Π΅ Π² красивом Π²ΠΈΠ΄Π΅. Π”ΠΈΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π² production систСму ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, просто thread dump, ΠΈ всС…

И кончая Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ свой собствСнный инструмСнт профилирования памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, малСнький, Π΅Π³ΠΎ слоТно Π½Π°Π·Π²Π°Ρ‚ΡŒ инструмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отслСТиваСт, Π³Π΄Π΅ ΠΈ Ρ‡Ρ‚ΠΎ выдСляСтся, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ½ это, практичСски Π½Π΅ замСдляя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΊ коммСрчСскиС, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ ΡƒΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ, ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΡƒΡŽ. Они ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти происходит, с ΠΏΠΎΠ»Π½Ρ‹ΠΌ stack-trace’ΠΎΠΌ. Π­Ρ‚ΠΎ Π΄ΠΎΠ»Π³ΠΎ, это сильно замСдляСт. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ сСмплированиС. НС всСгда ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚, Ρ‚Π΅ΠΌ самым получая Π½Π΅ всю статистику, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π˜Π΄ΡƒΡ‚ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ свои компромиссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² вашСй ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области, ΠΎΠ½ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ свои Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π°ΡˆΠΈΡ… систСм.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° вопросы (ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° вопросы с 30:06).


Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ-стСнограммы с application developer days, ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ всС Π²ΠΈΠ΄Π΅ΠΎ с ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ Ρ‚ΠΎΡ€Ρ€Π΅Π½Ρ‚Π°ΠΌΠΈ ([2011], [2010]) ΠΈΠ»ΠΈ всю ΠΏΠ°ΠΏΠΊΡƒ ΠΏΠΎ http.


Disclaimer Π΅Ρ‰Π΅ Ρ€Π°Π·: Π― Π½Π΅ Π°Π²Ρ‚ΠΎΡ€ Π΄ΠΎΠΊΠ»Π°Π΄Π°. Π― ΠΏΡ€Π΅Π΄ΡΠ΅Π΄Π°Ρ‚Π΅Π»ΡŒ ПК этой ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎ-ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ΅Ρ€, ΠΈ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ стСнограммы. Π£ Π°Π²Ρ‚ΠΎΡ€Π° Π½Π΅Ρ‚ Ρ…Π°Π±Ρ€Π°Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ½Π΅ удастся Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ вашим вопросам.Автор Π΄ΠΎΠΊΠ»Π°Π΄Π° elizarov ΠΏΡ€ΠΈΠ·Π²Π°Π½ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° вопросы.Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ обсуТдСниС Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Π°Π²Ρ‚ΠΎΡ€Π°.

BTW, elizarov выступаСт Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ADD-2012 с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ «ПишСм самый быстрый Ρ…ΡΡˆ для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…Β».

ΠŸΡΡ‚ΡŒ сСкрСтов… контроля ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java, Ρ‡Π°ΡΡ‚ΡŒ 1

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JConsole ΠΈ VisualVM

Π’Π΅Π΄ ΠΡŒΡŽΠ²ΠΎΡ€Π΄
ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ 19.10.2012

Об этом Ρ†ΠΈΠΊΠ»Π΅ статСй

Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ всС? На самом Π΄Π΅Π»Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ скрСбСт ΠΏΠΎ повСрхности ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, ΠΈΠ·ΡƒΡ‡ΠΈΠ² Π΅Π΅ лишь Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ этом Ρ†ΠΈΠΊΠ»Π΅ статСй Π’Π΅Π΄ ΠΡŒΡŽΠ°Ρ€Π΄ углубляСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, выявляя малоизвСстныС Ρ„Π°ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ самых заковыристых Π·Π°Π΄Π°Ρ‡ программирования.

Бсылка Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» (in English)

Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π²ΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΏΠ°Π½ΠΈΠΊΡƒ, ΠΈ Ρ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ вСская ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°. Поиск ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΡƒΠ·ΠΊΠΈΡ… мСст Π² Java-прилоТСниях всСгда Π±Ρ‹Π»ΠΎ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ болью ― ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ΠΈΠΌΠ΅Π΅Ρ‚ свойства «Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика», Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Java Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ нСдоставало инструмСнтов профилирования.

Однако с появлСниСм JConsole Π² Java 5 всС измСнилось. JConsole – это встроСнный ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Π² GUI-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅. Он Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½, Π½ΠΎ слуТит Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ достаточной ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹, ΠΊΠΎΠ³Π΄Π° босс ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΌ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” ΠΈ это Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρƒ Google.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° 5 сСкрСтов… я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ ΠΏΡΡ‚ΡŒ простых способов использования инструмСнта JConsole (ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ собрата VisualVM) для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ отслСТивания ΡƒΠ·ΠΊΠΈΡ… мСст Π² ΠΊΠΎΠ΄Π΅ Java.

1. JDK поставляСтся с ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠΌ

МногиС Java-программисты Π½Π΅ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ, начиная с Java 5, Π² JDK Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ инструмСнт профилирования. JConsole (ΠΈΠ»ΠΈ, Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, VisualVM) β€” это встроСнный ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ, ΠΊΠ°ΠΊ компилятор Java. Достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ jconsole ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ JDK Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ PATH. Π’ GUI-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ установки JDK, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ bin ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° jconsole.

Когда ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ появится (врСмя зависит ΠΎΡ‚ вСрсии Java ΠΈ количСства Π΄Ρ€ΡƒΠ³ΠΈΡ… Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚), откроСтся Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с запросом URL-адрСса процСсса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ слСдуСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΈΠ»ΠΈ списком Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… процСссов Java β€” ΠΈΠ½ΠΎΠ³Π΄Π° содСрТащим сам процСсс JConsole.

JConsole ΠΈΠ»ΠΈ VisualVM?

JConsole Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ выпуск ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, начиная с Java 5. VisualVM β€” это ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€, основанный Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ NetBeans, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появился Π³Π΄Π΅-Ρ‚ΠΎ Π² Java 6 update 12. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° Java 6 Π΅Ρ‰Π΅, поэтому данная ΡΡ‚Π°Ρ‚ΡŒΡ посвящСна JConsole. Однако Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ совСтов Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΎΠ±ΠΎΠΈΡ… ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. VisualVM Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Java 6, Π½ΠΎ ΠΈ прСдоставляСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π‘ΠΌ. Ρ€Π°Π·Π΄Π΅Π» РСсурсы.)

Π Π°Π±ΠΎΡ‚Π° с JConsole

Π’ Java 5 Java-процСссы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ настроСны Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈ запускС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -Dcom.sun.management.jmxremote ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π’Πœ Java 5, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΌΠΎΠ³ ΠΈΡ… Π½Π°ΠΉΡ‚ΠΈ. Когда JConsole слСдит Π·Π° процСссом, достаточно Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ вносят свои собствСнныС ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΈΡ…. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ JConsole — сначала Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠΌ, ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ слишком большим ΠΈΠ»ΠΈ слишком малСньким, ΠΌΠΎΠΉ Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ — SwingSet2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поставляСтся с JDK). Π― сначала ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ SwingSet2 с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -verbose:gc, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ сбора мусора, Π° Π·Π°Ρ‚Π΅ΠΌ запустил Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠΌ JConsole. Π‘ JConsole наблюдалась рСгулярная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΎΠ² GC, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½Π΅ Π±Ρ‹Π»ΠΎ. Π­Ρ‚ΠΎ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°.

2. ДистанционноС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ процСссам

ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ Web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ связь Ρ‡Π΅Ρ€Π΅Π· сокСт, поэтому достаточно нСбольшой настройки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ JConsole (ΠΈΠ»ΠΈ любой ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ Π½Π° основС JVMTI) ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π»/ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π» ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ прилоТСния.

НапримСр, Ссли Tomcat Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ webserver, ΠΈ JMX Π½Π° этой JVM Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ€Ρ‚ 9004, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ JConsole (ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ JMX-ΠΊΠ»ΠΈΠ΅Π½Ρ‚), Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ URL-адрСс JMX service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi.

По сути, всС, Ρ‡Ρ‚ΠΎ трСбуСтся для профилирования сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, β€” это URL-адрСс JMX. (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JMX ΠΈ JConsole см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ РСсурсы.)

3. ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ статистики

НСстандартный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

На ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΊΠΎΠ΄Π΅ прилоТСния Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π½ΠΎ всС эти Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ прСдсказуСмы. Π’Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ с ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π½Π΅ΠΉ Java, скорСС всСго, запустят ΡΡ‚Π°Ρ€ΡƒΡŽ IDE ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ основныС части Π±Π°Π·Ρ‹ исходного ΠΊΠΎΠ΄Π° Π² поисках Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… «ΠΊΡ€Π°ΡΠ½Ρ‹Ρ… Ρ„Π»Π°ΠΆΠΊΠΎΠ²», Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ синхронизированныС Π±Π»ΠΎΠΊΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚.ΠΏ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ с мСньшим стаТСм, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€ΠΏΠ΅Ρ‚ΡŒ Π½Π°Π΄ Ρ„Π»Π°Π³Π°ΠΌΠΈ -X, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ JVM, Π² поисках способов ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ сборщика мусора. А Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, ΠΏΠΎΠΉΠ΄ΡƒΡ‚ прямо Π² Google Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡƒΠΆΠ΅ нашСл магичСский Β«ΡƒΡΠΊΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΒ» JVM, ΠΈ ΠΈΠΌ Π½Π΅ придСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ вСсь ΠΊΠΎΠ΄.

Ни Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ, Π½ΠΎ всС это дСйствия Π½Π°ΡƒΠ³Π°Π΄. НаиболСС эффСктивноС срСдство Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” использованиС ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ встроСн Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Java, ΠΎΡ‚ΠΊΠ°Π·Ρƒ ΠΎΡ‚ этого Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ оправдания!

Π’ JConsole Π΅ΡΡ‚ΡŒ нСсколько Π²ΠΊΠ»Π°Π΄ΠΎΠΊ, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… для сбора статистичСских Π΄Π°Π½Π½Ρ‹Ρ…, Π² Ρ‚ΠΎΠΌ числС:

  • Memory: для наблюдСния Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΡƒΡ‡ Π² сборщикС мусора JVM;
  • Threads: для изучСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ JVM;
  • Classes: для наблюдСния Π·Π° ΠΎΠ±Ρ‰ΠΈΠΌ количСством Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… классов Π’Πœ.

Π­Ρ‚ΠΈ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ (ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ) основаны Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… JMX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ каТдая Π’Πœ Java 5 ΠΈ Π²Ρ‹ΡˆΠ΅ рСгистрируСт Π² JMX-сСрвСрС, встроСнном Π² JVM. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² составС Π΄Π°Π½Π½ΠΎΠΉ JVM ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ MBeans вмСстС с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом для просмотра этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. (Однако рСгистрация для получСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса JConsole.)

ИспользованиС статистики

Допустим, Ρ‡Ρ‚ΠΎ процСсс Tomcat «Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚» ΠΈΠ·-Π·Π° ошибок Ρ‚ΠΈΠΏΠ° OutOfMemoryError. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ JConsole, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Classes ΠΈ слСдитС Π·Π° количСством классов. Если ΠΈΡ… число Π½Π΅ΡƒΠΊΠ»ΠΎΠ½Π½ΠΎ возрастаСт, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Π² сСрвСрС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ вашСм ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° ClassLoader, ΠΈ Π² скором Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ пространство PermGen Π±ΡƒΠ΄Π΅Ρ‚ исчСрпано. Если трСбуСтся дальнСйшСС ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Memory.

4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°ΠΌΠΏΠ° ΠΊΡƒΡ‡ΠΈ для Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°

Π’ производствСнной срСдС часто всС происходит ΠΎΡ‡Π΅Π½ΡŒ быстро, ΠΈ Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ с ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠΌ. ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снимок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния всСго содСрТимого срСды Java ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² JConsole, Π° Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ― Π² VisualVM.

НачнитС с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ MBeans, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠ·Π΅Π» com.sun.management, Π° Π·Π°Ρ‚Π΅ΠΌ HotSpotDiagnostic. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Operations, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ dumpHeap Π½Π° ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. Если Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° (String) ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ dumpHeap имя Ρ„Π°ΠΉΠ»Π° для Π΄Π°ΠΌΠΏΠ°, ΠΎΠ½ сдСлаСт снимок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния всСй ΠΊΡƒΡ‡ΠΈ JVM ΠΈ сохранит Π΅Π³ΠΎ Π² этом Ρ„Π°ΠΉΠ»Π΅.

ПозднСС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ коммСрчСскиС ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ для Π°Π½Π°Π»ΠΈΠ·Π° Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ VisualVM ― для Π°Π½Π°Π»ΠΈΠ·Π° снимка. (ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ VisualVM присутствуСт Π² Java 6, Π° Ρ‚Π°ΠΊΠΆΠ΅ доступСн для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ).

5. JConsole ― Π½Π΅ ΠΏΡ€Π΅Π΄Π΅Π» ΠΌΠ΅Ρ‡Ρ‚Π°Π½ΠΈΠΉ

ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ JConsole Ρ…ΠΎΡ€ΠΎΡˆ, Π½ΠΎ Π΅ΡΡ‚ΡŒ инструмСнты ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅. НСкоторыС содСрТат аналитичСскиС дополнСния ΠΈΠ»ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ большС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ JConsole.

Π’ JConsole Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° «старом Π΄ΠΎΠ±Ρ€ΠΎΠΌ языкС JavaΒ»: Ρ‚Π°ΠΊΡƒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ ΠΌΠΎΠ³ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ любой Java-программист. Π’ JDK Π΄Π°ΠΆΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ JConsole, создав Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ для Π½Π΅Π³ΠΎ (см. Ρ€Π°Π·Π΄Π΅Π» РСсурсы). Π’ VisualVM, построСнном ΠΏΠΎΠ²Π΅Ρ€Ρ… NetBeans, концСпция ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΈΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ дальшС.

Если JConsole (Π° Ρ‚Π°ΠΊΠΆΠ΅ VisualVM ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ инструмСнт) ― совсСм Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, ΠΈΠ»ΠΈ отслСТиваСт Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅, ΠΈΠ»ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ хочСтся, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный. И Ссли Java-ΠΊΠΎΠ΄ каТСтся слишком Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ, всСгда ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Groovy, JRuby ΠΈΠ»ΠΈ любой ΠΈΠ· дСсятка Π΄Ρ€ΡƒΠ³ΠΈΡ… языков JVM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это быстрСС.

На самом Π΄Π΅Π»Π΅ достаточно простого инструмСнта Π½Π° основС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Π΅Π· JMX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ вас Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java Π½Π΅ заканчиваСтся Π½Π° JConsole ΠΈΠ»ΠΈ VisualVM β€” Π² JDK скрываСтся Ρ†Π΅Π»Ρ‹ΠΉ ряд инструмСнтов, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅Ρ‚. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ этого Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства Π½Π° основС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ «Π½Π°Ρ€Ρ‹Ρ‚ΡŒ» большС Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти инструмСнты ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ½ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅ ΠΈ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π° ΠΈ поэтому сами мСньшС Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

РСсурсы для скачивания
ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Java ΠΏΠΎΠ΄ Linux / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ JUG Ru Group / Π₯Π°Π±Ρ€

Π‘Ρ‹Ρ‚ΡƒΠ΅Ρ‚ ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ бСсконСчно ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° огонь, Π²ΠΎΠ΄Ρƒ ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ! ΠœΡ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ бСсконСчно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ с БашСй goldshtn Π“ΠΎΠ»ΡŒΠ΄ΡˆΡ‚Π΅ΠΉΠ½ΠΎΠΌ ΠΎ пСрформансС. ΠœΡ‹ ΡƒΠΆΠ΅ Π±Ρ€Π°Π»ΠΈ Ρƒ Баши ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ JPoint 2017, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ касался ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ BPF, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±Ρ‹Π» посвящСн Π΄ΠΎΠΊΠ»Π°Π΄ Баши.

На этот Ρ€Π°Π· ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΊΠΎΠΏΠ½ΡƒΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π‘ Ρ‡Π΅Π³ΠΎ стоит Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ

β€” Π’ ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π· ΠΌΡ‹ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ BPF ΠΈ вскользь обсудили ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java ΠΏΠΎΠ΄ Linux. Π’ этот Ρ€Π°Π· Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ инструмСнтС, Π° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΈ поискС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ вопрос, довольно Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ, β€” ΠΊΠ°ΠΊ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ТалуСтся?

Баша Π“ΠΎΠ»ΡŒΠ΄ΡˆΡ‚Π΅ΠΉΠ½: Если Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ваши ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΆΠ°Π»ΡƒΡŽΡ‚ΡΡ, с Π²Π°ΠΌΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅Π΄ΠΎΠ»Π³ΠΎ. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… инТСнСрия ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” это Ρ‚Ρ€Π°Π±Π»ΡˆΡƒΡ‚ΠΈΠ½Π³ ΠΈ crisis mode. Π’Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹ звонят, свСт ΠΌΠΈΠ³Π°Π΅Ρ‚, систСма ΡƒΠΏΠ°Π»Π°, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π³ΠΎΡ€ΠΈΡ‚ β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ²Ρ‹ΠΉ Π±ΡƒΠ΄Π½ΠΈ пСрформанс-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΆΠ΅ ΠΎΠ½ΠΈ проводят Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ своСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, планируя, проСктируя, мониторя ΠΈ прСдотвращая кризисы.

Для Π½Π°Ρ‡Π°Π»Π°, capacity planning β€” ΠΎΡ†Π΅Π½ΠΊΠ° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы ΠΈ использования рСсурсов; ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΡ… мСст ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ увСличСния Π² Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅; инструмСнтированиС ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для понимания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ Π²ΡΠ»Π΅ΠΏΡƒΡŽ; благодаря установкС автоматичСского оповСщСния Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ ΠΎ Π»ΡŽΠ±Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΅Ρ‰Ρ‘ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ; Π½Ρƒ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ кризисы, Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ придётся Π² стрСссовых условиях.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΠ»Ρ‹ постоянно ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Π½ΠΎ сам процСсс остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²: capacity planning Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π½Π° Π±ΡƒΠΌΠ°ΠΆΠΊΠ΅ Π½Π° ΠΊΠΎΠ»Π΅Π½ΠΊΠ΅; ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ APM-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (ΠΊΠ°ΠΊ New Relic ΠΈΠ»ΠΈ Plumbr) для end-to-end инструмСнтирования ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, AB ΠΈ JMeter для быстрого Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ тСстирования ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ Π‘Ρ€Π΅Π½Π΄Π°Π½Π° Π“Ρ€Π΅Π³Π³Π° Β«Systems PerformanceΒ» β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ источник ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ пСрформанса, Π° Β«Site Reliability EngineeringΒ» ΠΎΡ‚ Google освСщаСт Ρ‚Π΅ΠΌΡƒ установки характСристик ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Service Level Objectives) ΠΈ ΠΈΡ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

β€” Допустим, ΠΌΡ‹ поняли, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΅ΡΡ‚ΡŒ: с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ? МнС часто каТСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ (особСнно Π½Π΅ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ пСрформанс-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹) сразу Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Ρ€Π°ΡΡ‡Π΅Ρ…Π»ΡΡ‚ΡŒ JMH, ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всё Π½Π° unsafe ΠΈ Β«Ρ…Π°ΠΊΠ°Ρ‚ΡŒ компиляторы». ΠŸΠΎΡ‚ΠΎΠΌ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. Но вСдь Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ с этого Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ?

Баша Π“ΠΎΠ»ΡŒΠ΄ΡˆΡ‚Π΅ΠΉΠ½: Π­Ρ‚ΠΎ довольно распространённая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… тСстов ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с пСрформансом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, помСняв ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Β«Ρ…Π°ΠΊΠ½ΡƒΠ² компиляторы». Однако Π½Π° ΠΏΡ€ΠΎΠ΄Π΅, исходя ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π°, это дСлаСтся Π½Π΅ Ρ‚Π°ΠΊ часто. МногиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ присущи Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΉ срСдС, Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ»ΠΈ связаны с ΡƒΠ·ΠΊΠΈΠΌΠΈ мСстами Π²Π½Π΅ ΠΊΠΎΠ΄Π° вашСго прилоТСния, ΠΈ лишь ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠΈΠΊΡ€ΠΎΠ±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исходного ΠΊΠΎΠ΄Π° Β«ΡƒΠΌΠ½Ρ‹ΠΌΠΈΒ» Ρ…Π°ΠΊΠ°ΠΌΠΈ.

Π’ΠΎΡ‚ ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ:

  • ΠŸΠ°Ρ€Ρƒ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ Datadog ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° вставки ΠΈ обновлСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² PostgreSQL скакали ΠΎΡ‚ 50 мс Π΄ΠΎ 800 мс. Они использовали AWS EBS с SSD. Π§Ρ‚ΠΎ это Π΄Π°Π»ΠΎ? ВмСсто Ρ‚ΡŽΠ½ΠΈΠ½Π³Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ измСнСния ΠΊΠΎΠ΄Π° прилоТСния ΠΎΠ½ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚ Π²ΠΎ всём Ρ‚Ρ€ΠΎΡ‚Ρ‚Π»ΠΈΠ½Π³ EBS: Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ²ΠΎΡ‚Π° ΠΏΠΎ IOPS, Π² случаС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚Π΅ ΠΏΠΎΠ΄ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • НСдавно Ρƒ мСня Π±Ρ‹Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… скачков Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° Π½Π° сСрвСрС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ связаны с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ сбора мусора. НСкоторыС запросы Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ 5 сСкунд (ΠΈ появлялись ΠΎΠ½ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСссистСмно), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сборка мусора Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠ»Π° ΠΈΠ·-ΠΏΠΎΠ΄ контроля. Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΠ² систСму, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ с распрСдСлСниСм памяти прилоТСния ΠΈΠ»ΠΈ ΠΆΠ΅ с Ρ‚ΡŽΠ½ΠΈΠ½Π³ΠΎΠΌ сборки мусора всё Π±Ρ‹Π»ΠΎ Π² порядкС; ΠΈΠ·-Π·Π° скачка Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ фактичСскоС использованиС памяти ΠΏΠΎΠ²Ρ‹ΡΠΈΠ»ΠΎΡΡŒ ΠΈ Π²Ρ‹Π·Π²Π°Π»ΠΎ свопинг, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π³ΡƒΠ±ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ любой сборки мусора (Ссли сборщику Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, β€” это ΠΊΠΎΠ½Π΅Ρ†).
  • ΠŸΠ°Ρ€Ρƒ мСсяцСв Π½Π°Π·Π°Π΄ Sysdig столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ изоляции ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ рядом с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π₯, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, выполняСмыС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Y, Π±Ρ‹Π»ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ использованиС памяти ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° процСссора для ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ. ПослС нСбольшого исслСдования ΠΎΠ½ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ кэш ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ядра пСрСгруТался ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π₯, Ρ‡Ρ‚ΠΎ Π² дальнСйшСм Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ коллизию Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ, ΠΊΠ°ΠΊ слСдствиС, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅. ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° прилоТСния ΠΈΠ»ΠΈ распрСдСлСния рСсурсов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ.

Π― понимаю, Ρ‡Ρ‚ΠΎ часто Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ‰Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‚Ρ‹ моТСшь ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ…Π°ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Чисто психологичСски это понятно, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ систСмы ΠΈΠ»ΠΈ срСды ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ считаСтся Β«ΠΊΡ€ΡƒΡ‡Π΅Β» Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π°Ρ…. Но ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ этому Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

β€” НавСрняка слСдуСт сначала ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/сСрвис Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅. КакиС инструмСнты Ρ‚Ρ‹ для этого Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΡˆΡŒ, Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ?

Баша Π“ΠΎΠ»ΡŒΠ΄ΡˆΡ‚Π΅ΠΉΠ½: ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³ Π½Π° ΠΏΡ€ΠΎΠ΄Π΅ β€” это Π½Π°Π±ΠΎΡ€ инструмСнтов ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊ.

НачинаСм с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ высокоуровнСвого пСрформанса, Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡΡΡŒ Π½Π° использовании рСсурсов (процСссор, ΠΏΠ°ΠΌΡΡ‚ΡŒ, диск, ΡΠ΅Ρ‚ΡŒ) ΠΈ характСристикС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (# запросов, ошибок, Ρ‚ΠΈΠΏΠΎΠ² запросов, # запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…). Π•ΡΡ‚ΡŒ стандартныС Ρ‚ΡƒΠ»Ρ‹ для получСния этих Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½Π° Linux ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ инструмСнты Π²Ρ€ΠΎΠ΄Π΅ vmstat, iostat, sar, ifconfig, pidstat; для JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JMX-based Ρ‚ΡƒΠ»Ρ‹ ΠΈΠ»ΠΈ jstat. Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с 5-Ρ‚ΠΈ ΠΈΠ»ΠΈ 30-Ρ‚ΠΈ сСкундным ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скачки ΠΈ ΠΏΡ€ΠΈ нСобходимости Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ, Ρ€Π΅Π»ΠΈΠ·Ρ‹, ΠΌΠΈΡ€ΠΎΠ²Ρ‹Π΅ события ΠΈΠ»ΠΈ измСнСния Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° собирании Ρ‚ΠΎΠ»ΡŒΠΊΠΎ срСдних ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ; ΠΎΠ½ΠΈ Ρ…ΠΎΡ‚ΡŒ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈ, Π½ΠΎ, ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ распрСдСлСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ измСряСтС. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΠΈ, Π° ΠΏΠΎ возмоТности Π΄Π°ΠΆΠ΅ ΠΈ гистограммы.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ β€” это ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ нСльзя Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя. Они Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя: Π»ΠΎΠ³ сбора мусора, запросы сСти, запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, классовыС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этих Π΄Π°Π½Π½Ρ‹Ρ… послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΡ… Π³Π΄Π΅-Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅, Ρ‡Π΅ΠΌ, собствСнно, ΠΈΡ… ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ позволяСт, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы, Π²Ρ€ΠΎΠ΄Π΅ Β«ΠΊΠ°ΠΊΠΈΠ΅ запросы Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, ΠΏΠΎΠΊΠ° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ЦП Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π»Π°ΡΡŒ Π΄ΠΎ 100%Β» ΠΈΠ»ΠΈ Β«ΠΊΠ°ΠΊΠΈΠΌΠΈ Π±Ρ‹Π»ΠΈ IOPS дисков ΠΈ врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° Π²ΠΎ врСмя выполнСния этого запроса». Одни лишь числа, особСнно Π² Π²ΠΈΠ΄Π΅ срСдних ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π΅ позволят Π²Π°ΠΌ провСсти ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° исслСдованиС.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Β«Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€Π½Ρ‹ΠΉΒ» ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ: SSH Π² сСрвСрС (ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ запуск Ρ‚ΡƒΠ»ΠΎΠ²) для сбора большСго количСства Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²ΠΎ врСмя ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвиса. Π­Ρ‚ΠΎ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°ΠΌΠΈΒ».

Для ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³Π° Java-ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π° сущСствуСт мноТСство ΠΆΡƒΡ‚ΠΊΠΈΡ… Ρ‚ΡƒΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°ΡŽΡ‚ большой овСрхэд ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Ρ‰Ρ‘ ΠΈ Π»Π³Π°Ρ‚ΡŒ Π²Π°ΠΌ. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ экосистСмС ΡƒΠΆΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 20 Π»Π΅Ρ‚, Π΅ΡΡ‚ΡŒ лишь нСсколько Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ с Π½ΠΈΠ·ΠΊΠΈΠΌ овСрхэдом для JVM-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π― ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Honest Profiler Π ΠΈΡ‡Π°Ρ€Π΄Π° Π’ΠΎΡ€Π±Π΅Ρ€Ρ‚ΠΎΠ½Π°, async-profiler АндрСя Паньгина ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠ΅Π³ΠΎ Π»ΡŽΠ±ΠΈΠΌΡ‡ΠΈΠΊΠ° β€” perf.

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΡƒΠ»ΠΎΠ² Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³Π΅ процСссора, Ρ€Π°Π·Π±ΠΈΡ€Π°ΡΡΡŒ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡƒΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ЦП. Π­Ρ‚ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Π½ΠΎ часто ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² этом; Π½ΡƒΠΆΠ½Ρ‹ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΠΈ выполнСния ΠΊΠΎΠ΄Π°, отвСтствСнныС Π·Π° распрСдСлСниС памяти (async-profiler Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ это), ошибки отсутствия страницы, Π½Π΅ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² кэш, доступы ΠΊ диску, запросы сСти, запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ события. МСня Π² этой области ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° поиска ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… пСрформанс-Ρ‚ΡƒΠ»ΠΎΠ² для исслСдования Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ срСды.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Java ΠΏΠΎΠ΄ Linux

β€” Π― ΡΠ»Ρ‹ΡˆΠ°Π», Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ Java/Linux стСк Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Ρ€ΠΎΠ². НавСрняка с этим ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ. Как Ρ‚Ρ‹ это дСлаСшь?

Баша Π“ΠΎΠ»ΡŒΠ΄ΡˆΡ‚Π΅ΠΉΠ½: Π”Π°, это ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит тСкущая ситуация: Ρƒ вас Π΅ΡΡ‚ΡŒ быстрая конвСйСрная линия с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ количСством Ρ€Π°Π·Π½Ρ‹Ρ… частСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ прилоТСния/сСрвиса. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, поэтому ваша основная стратСгия β€” это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ 1 Ρ‡Π°ΡΡ‚ΡŒ Π² сСкунду ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, всё Π»ΠΈ Π² порядкС, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ это Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Β«ΠΊΡ€ΠΎΡ…ΠΎΡ‚Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎΒ» Π½Π°Π΄ этой Β«Π»Π΅Π½Ρ‚ΠΎΠΉΒ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π»ΠΈΠΆΠ΅ ΡƒΠΆΠ΅ опасно. Π’Ρ€ΠΎΠ΄Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? Но ΠΏΠΎΡ‚ΠΎΠΌ оказываСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΎΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΌ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅ прямо сСйчас; ΠΎΠ½ΠΎ ΠΆΠ΄Ρ‘Ρ‚, ΠΏΠΎΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚ Π² Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΉ «бСзопасный» Ρ€Π΅ΠΆΠΈΠΌ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ всё ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ оказываСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… частСй Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΉΡ‚ΠΈ Π² свой «бСзопасный» Ρ€Π΅ΠΆΠΈΠΌ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ рядом; ΠΈ Π΅Ρ‰Ρ‘ оказываСтся, Ρ‡Ρ‚ΠΎ процСсс поиска Π΄Π΅Ρ„Π΅ΠΊΡ‚Π° Π² окошкС Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ†Π΅Π»Ρ‹Ρ… 5 сСкунд, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ состоянии сСйчас находится мноТСство ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ² Π² ΠΌΠΈΡ€Π΅ JVM. YourKit, jstack, JProfiler, VisualVM β€” Ρƒ всСх Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³Ρƒ ЦП: ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ сСмплинг ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² бСзопасном состоянии. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ API, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС JVM-Ρ‚Ρ€Π΅Π΄Ρ‹ ΠΈ Π²Π·ΡΡ‚ΡŒ ΠΈΡ… стСк-трСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ для ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° с самыми горячими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ стСками.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊΠΎΠΉ приостановки процСсса Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Ρ‚Ρ€Π΅Π΄Ρ‹ Π½Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ сразу ΠΆΠ΅, Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ ΠΆΠ΄Ρ‘Ρ‚, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠΉΠ΄ΡƒΡ‚ Π΄ΠΎ бСзопасного состояния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ послС мноТСства инструкций ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½Π΅ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния, Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Ρ‰Ρ‘ ΠΈ Π½Π΅ ΡΠΎΠ³Π»Π°ΡˆΠ°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ!

Π•ΡΡ‚ΡŒ исслСдованиС, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, насколько это ΠΏΠ»ΠΎΡ…ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π° своя Ρ‚ΠΎΡ‡ΠΊΠ° зрСния ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ самого горячСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ (ΠœΠΈΡ‚ΠΊΠΎΠ²ΠΈΡ‡ ΠΈ соавт., Β«Evaluating the Accuracy of Java ProfilersΒ»). Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ 1000 Ρ‚Ρ€Π΅Π΄ΠΎΠ² Π² слоТном стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Spring, часто ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ стСк-трСйсы Π½Π΅ получится. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Ρ‡Π°Ρ‰Π΅ 10 Ρ€Π°Π· Π² сСкунду. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ваши Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ стСкам Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ фактичСской Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΅Ρ‰Ρ‘ большС!

Π Π΅ΡˆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСпросто, Π½ΠΎ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ стоит: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Β«Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅Β» Ρ‚ΡƒΠ»Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ пСрСчислСнных Π²Ρ‹ΡˆΠ΅.

БущСствуСт Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ ΠΎΠ΄ΠΈΠ½ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ:

  • Honest Profiler Π ΠΈΡ‡Π°Ρ€Π΄Π° Π’ΠΎΡ€Π±Π΅Ρ€Ρ‚ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ API, AsyncGetCallTrace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ стСк-трСйс ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π΄Π°, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² бСзопасноС состояниС ΠΈ вызываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ Π±Ρ‹Π» спроСктирован Oracle Developer Studio. Основной ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² установкС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала ΠΈ Π΅Π³ΠΎ рСгистрации Π½Π° сигнал с установлСнным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 100 Π“Ρ†). Π—Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π·ΡΡ‚ΡŒ стСк-трСйс любого Ρ‚Ρ€Π΅Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСпростыС Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ эффСктивного объСдинСния стСк-трСйсов, особСнно Π² контСкстС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала, Π½ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. (Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JFR, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΡƒΡŽ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ)
  • Linux perf ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ сэмплинг стСков (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для инструкций ЦП, Π½ΠΎ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… событий, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ доступ диска ΠΈ запросы сСти). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ адрСса Java-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ JVMTI-Π°Π³Π΅Π½Ρ‚Π°, Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ тСкстовый Ρ„Π°ΠΉΠ» (perf map), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ perf ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с рСконструкциСй стСка, Ссли JIT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ°. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшой ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ стСк-трСйсы Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для JVM-Ρ‚Ρ€Π΅Π΄ΠΎΠ² ΠΈ Java-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ ΠΈ для всСх ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρƒ вас Ρ‚Ρ€Π΅Π΄ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ стСк ядра ΠΈ стСки C++.
  • async-profiler АндрСя Паньгина сочСтаСт Π² сСбС Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Он устанавливаСт Π½Π°Π±ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² perf, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сигнала для Π²Ρ‹Π·ΠΎΠ²Π° AsyncGetStackTrace ΠΈ получСния Java-стСка. ОбъСдинСниС Π΄Π²ΡƒΡ… стСков Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅, позволяя ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ Java-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ°.

Π›ΡŽΠ±ΠΎΠΉ ΠΈΠ· этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ safepoint-biased ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ² с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния точности, рСсурсопотрСблСния ΠΈ частоты ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слоТными, Π½ΠΎ, Π΄ΡƒΠΌΠ°ΡŽ, Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π° с Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄ΠΎΠΌ стоит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… усилий.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…

β€” К слову ΠΎΠ± окруТСниях, сСйчас ΠΌΠΎΠ΄Π½ΠΎ всё ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, здСсь Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ особСнности? О Ρ‡Ρ‘ΠΌ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, работая с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ прилоТСниями?

Баша Π“ΠΎΠ»ΡŒΠ΄ΡˆΡ‚Π΅ΠΉΠ½: Π‘ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ интСрСсныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ‚ΡƒΠ»Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ напомню, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Linux построСны Π²ΠΎΠΊΡ€ΡƒΠ³ Π΄Π²ΡƒΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ: Π³Ρ€ΡƒΠΏΠΏΡ‹ контроля ΠΈ пространства ΠΈΠΌΡ‘Π½. Π“Ρ€ΡƒΠΏΠΏΡ‹ контроля ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ‚Ρƒ рСсурсов для процСсса ΠΈΠ»ΠΈ для Π³Ρ€ΡƒΠΏΠΏΡ‹ процСссов: CPU time caps, Π»ΠΈΠΌΠΈΡ‚ памяти, IOPS Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΡ‘Π½ Π΄Π΅Π»Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: mount namespace прСдоставляСт ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ монтирования (фактичСски, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму), PID namespace β€” собствСнныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСссов, network namespace Π΄Π°Ρ‘Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ собствСнный сСтСвой интСрфСйс ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Из-Π·Π° пространства ΠΈΠΌΡ‘Π½ мноТСству Ρ‚ΡƒΠ»ΠΎΠ² слоТно ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ JVM-прилоТСниями (хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ свойствСнны Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ JVM).

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ вопросы, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅, Ссли ΠΌΡ‹ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ расскаТСм ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄Π°Ρ… observability Ρ‚ΡƒΠ»ΠΎΠ² для JVM. Если Π²Ρ‹ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ…, самоС врСмя ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ ваши знания:

  • Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΡƒΠ»Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ jps ΠΈ jinfo ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… JVM-процСссах ΠΈ ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ;
  • jstack ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ thread dump (стСк-трСйс) ΠΈΠ· Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… JVM-процСссов;
  • jmap β€” для получСния head dump Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… JVM-процСссов ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ простых гистограмм классов;
  • jcmd ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Ρ‚ΡƒΠ»Ρ‹ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ JVM-процСссам Ρ‡Π΅Ρ€Π΅Π· JVM attach interface; ΠΎΠ½ основан Π½Π° сокСтС Π΄ΠΎΠΌΠ΅Π½Π° UNIX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JVM-процСссами ΠΈ jcmd для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ;
  • jstat β€” для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ JVM-пСрформанса, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° класса, JIT-компиляция ΠΈ статистика сборки мусора; основан Π½Π° JVM, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ„Π°ΠΉΠ»Ρ‹ /tmp/hsperfdata_$UID/$PID с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅;
  • Serviceability Agent прСдоставляСт интСрфСйс для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ памяти JVM процСссов, Ρ‚Ρ€Π΅Π΄ΠΎΠ², стСков ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован с Π΄Π°ΠΌΠΏΠΎΠΌ памяти ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠΈΠ²Ρ‹Ρ… процСссов; ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, читая ΠΏΠ°ΠΌΡΡ‚ΡŒ процСсса ΠΈ структуры Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…;
  • JMX (управляСмыС Π±ΠΈΠ½Ρ‹) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ пСрформансС ΠΎΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ процСсса, Π° Ρ‚Π°ΠΊΠΆΠ΅ для отправлСния ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅;
  • JVMTI-Π°Π³Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ интСрСсным JVM-событиям, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° классов, компиляция ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², запуск/остановка Ρ‚Ρ€Π΅Π΄Π°, monitor contention ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³Π΅ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠ· хоста, ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± этом ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅):

  • Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ инструмСнтов Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ доступ ΠΊ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°ΠΌ процСсса для поиска ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Всё это находится Π² mount namespace ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ нСдоступно ΠΈΠ· хоста. Частично этот доступ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ bind-mounting ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΊ Π²Π²ΠΎΠ΄Ρƒ mount namespace ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π΅ Π²ΠΎ врСмя выполнСния symbol resolving (это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСйчас Π΄Π΅Π»Π°ΡŽΡ‚ perf ΠΈ BCC Ρ‚ΡƒΠ»Ρ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я рассказывал Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ).
  • Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ JVMTI-Π°Π³Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ perf map (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, perf-map-agent), ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ написана Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° /tmp, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ID процСсса ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /tmp/perf-1.map). Map-Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн хосту, Π° хост Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΆΠ΄Π°Ρ‚ΡŒ Π²Π΅Ρ€Π½Ρ‹ΠΉ ID процСсса Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. (ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, perf ΠΈ BCC Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это автоматичСски).
  • JVM attach interface (Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ jcmd, jinfo, jstack ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΡƒΠ»Ρ‹) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Π΅Ρ€Π½Ρ‹Ρ… PID ΠΈ mount namespace attach Ρ„Π°ΠΉΠ»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ сокСт UNIX Π΄ΠΎΠΌΠ΅Π½Π°, использовавшСгося для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с JVM. Π­Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΠΈΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ jattach utility ΠΈ создания attach Ρ„Π°ΠΉΠ»Π°, входя Π² пространство ΠΈΠΌΡ‘Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ bind-mounting ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° хостС.
  • использованиС Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JVM (Π² /tmp/hsperfdata_$UID/$PID), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ jstat, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ доступ ΠΊ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ пространства ΠΈΠΌΡ‘Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ адрСсуСтся bind-ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ /tmp ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° хостС;
  • самый простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ использованию JMX-based инструмСнтов β€” это, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, доступ ΠΊ JVM, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ β€” конфигурируя RMI endpoint, ΠΊΠ°ΠΊ Π²Ρ‹ Π±Ρ‹ Π΄Π΅Π»Π°Π»ΠΈ для ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ диагностики;
  • Ρ‚ΡƒΠ»Ρ‹ Serviceability Agent Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ соотвСтствия вСрсий ΠΌΠ΅ΠΆΠ΄Ρƒ JVM-процСссом ΠΈ хостом. Π”ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ стоит Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… Π½Π° хостС, особСнно Ссли ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠ΅ распрСдСлСниС ΠΈ Π½Π° Π½Ρ‘ΠΌ установлСны Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии JVM.

Π’ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ: Π° Ссли ΠΌΠ½Π΅ просто ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ пСрформанс-Ρ‚ΡƒΠ»Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с изоляциСй Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ Π½Π΅ ΠΈΠ·-Π·Π° мСня? Π₯ΠΎΡ‚ΡŒ идСя нСплохая, мноТСство Ρ‚ΡƒΠ»ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ·-Π·Π° seccomp. Docker, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, отклоняСт систСмный Π²Ρ‹Π·ΠΎΠ² perf_event_open, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³Π° с perf ΠΈ async-profiler; ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ отклоняСт систСмный Π²Ρ‹Π·ΠΎΠ² ptrace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ большим количСством Ρ‚ΡƒΠ»ΠΎΠ² для чтСния ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти JVM-процСсса. ИзмСнСниС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ seccomp для принятия этих систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ставит хост ΠΏΠΎΠ΄ ΡƒΠ³Ρ€ΠΎΠ·Ρƒ. Π’Π°ΠΊΠΆΠ΅, помСщая Ρ‚ΡƒΠ»Ρ‹ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΈΠ½Π³Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ.


ΠœΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΈ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ влияниС ΠΆΠ΅Π»Π΅Π·Π° Π½Π° профилированиС…

БовсСм скоро Баша ΠΏΡ€ΠΈΠ΅Π΄Π΅Ρ‚ Π² Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ провСсти Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³ ΠΏΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ JVM-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅ ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Joker 2017 с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ ΠΏΡ€ΠΎ BPF, поэтому, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΌΡƒ Π³Π»ΡƒΠ±ΠΆΠ΅ – Ρƒ вас Π΅ΡΡ‚ΡŒ всС ΡˆΠ°Π½ΡΡ‹ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ с БашСй Π»ΠΈΡ‡Π½ΠΎ.

АндрСй Паньгин ΠΈ Нитсан Π’Π°ΠΊΠ°Ρ€Ρ‚ ΠΎ Java-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ JUG Ru Group / Π₯Π°Π±Ρ€

Π›Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ профилирования Π½Π΅ стоит ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… новостСй: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΡƒΠΆΠ΅ дСсятилСтиями, Π΄ΠΎ Ρ‡Π΅Π³ΠΎ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ Π΄ΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ? Но Π² Java-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΡ€ΠΎΡŽΡ‚ΡΡ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ Π²Ρ€ΠΎΠ΄Π΅ safepoint bias, ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ инструмСнты для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

АндрСй apangin Паньгин (Одноклассники) Π½Π΅Π΄Π°Π²Π½ΠΎ создал ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… инструмСнтов: Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ JPoint Π² Π°ΠΏΡ€Π΅Π»Π΅ ΠΎΠ½ прСдставил опСнсорсный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ async-profiler, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ safepoint bias Π½Π΅ ΡΡ‚Ρ€Π°ΡˆΠ΅Π½. Π”Ρ€ΡƒΠ³ΠΎΠΉ экспСрт Π² этой Ρ‚Π΅ΠΌΠ΅ β€” Нитсан Π’Π°ΠΊΠ°Ρ€Ρ‚: ΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ с safepoints ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡƒΠ·Π½Π°Π»ΠΈ благодаря Π΅Π³ΠΎ Π±Π»ΠΎΠ³-посту Β«Why (Most) Sampling Java Profilers Are Fucking TerribleΒ».

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ с Π½ΠΈΠΌΠΈ ΠΎΠ±ΠΎΠΈΠΌΠΈ сразу, Π½Π°Ρ‡Π°Π² Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ с послСдних новостСй ΠΎΠ± async-profiler, Π° ΠΏΠΎΠ·ΠΆΠ΅ пСрСйдя ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Java-профилирования Π² Ρ†Π΅Π»ΠΎΠΌ.

JUG.ru: НСдавно async-profiler Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Ρ‘Π½ Π½Π° GitHub ΠΈΠ· Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСпозитория АндрСя Π² β€œjvm-profiling-tools” β€” Ρ‡Ρ‚ΠΎ прСдставляСт собой jvm-profiling-tools, ΠΈ Ρ‡Π΅ΠΌ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅?

Нитсан: Π­Ρ‚ΠΎ объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… схоТиС Ρ†Π΅Π»ΠΈ. ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС ΠΈ ΡΡ‚ΠΈΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСство Π°ΠΊΡ‚ΠΈΠ²Π½Π΅Π΅ ΠΈΡ… Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ.

АндрСй: ИмСнно. Когда стало понятно, Ρ‡Ρ‚ΠΎ async-profiler интСрСсСн Java-сообщСству, я Ρ€Π΅ΡˆΠΈΠ» Π΅Π³ΠΎ пСрСнСсти Π² Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ мСсто, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ сторонним Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΠΎΡ€ΠΎΠΉ Π½Π΅ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΈΡ‚ΡŒ Π² Ρ‡ΡƒΠΆΠΎΠΉ Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Нитсан: Π’ jvm-profiling-tools Π΅ΡΡ‚ΡŒ Honest Profiler, async-profiler ΠΈ perf-map-agent, ΠΈ ΠΎΠ½ΠΈ подходят ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅ с Ρ€Π°Π·Π½Ρ‹Ρ… сторон: perf-map-agent ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ возмоТности для профилирования с использованиСм линуксового perf, Honest Profiler ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ AsyncGetCallTrace, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ safepoint bias, Π° async-profiler совмСщаСт Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΡ‡Π΅Π½ΡŒ приятным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

АндрСй: Π”Π°. На самом Π΄Π΅Π»Π΅, Π² ΠΈΠ΄Π΅Π΅ сочСтания ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½ΠΈΡ‡Π΅Π³ΠΎ космичСского Π½Π΅Ρ‚, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ это Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎ.

Нитсан: Π’ΠΎΠΎΠ±Ρ‰Π΅ это Π±Ρ‹Π»ΠΎ Π² Solaris Studio, Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Solaris Studio Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ 20 Π² ΠΌΠΈΡ€Π΅.

АндрСй: Но, насколько я знаю, ΠΎΠ½ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ядра, Ρ‚Π°ΠΊ вСдь?

Нитсан: ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π½Π΅ ядро.

JUG.ru: ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ Honest Profiler ΠΈ async-profiler Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ прСимущСство «отсутствиС safepoint biasΒ», Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ взглядС Π½Π° jvm-profiling-tools Ρƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ вопрос: «Ну ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… инструмСнтов ΠΌΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?Β» Π§Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ?

АндрСй: Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ точности профилирования ΠΈ ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ async-profiler Π΄Π°Π»Π΅ΠΊΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ. Π’Π΅Π΄ΡŒ Π΄Π°ΠΆΠ΅ сам AsyncGetCallTrace Π² HotSpot Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ всСгда: Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… случаях JVM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ стСк-трСйс, хотя async-profiler справляСтся ΠΈ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ситуациями. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Honest Profiler Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ стСк-трСйсы. Но Π΅Π³ΠΎ большоС прСимущСство Π² инфраструктурС Π²ΠΎΠΊΡ€ΡƒΠ³ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…. Он ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ красиво, Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ UI, Π° async-profiler β€” это просто Java-Π°Π³Π΅Π½Ρ‚, запускаСмый ΠΈΠ· консоли.

Нитсан: Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Π·Π° async-profiler. И ΠΌΠ½Π΅ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности Honest Profiler ΠΏΠΎΠΏΠ°Π»ΠΈ Π² async-profiler. Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Honest Profiler Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° macOS, Π° async-profiler ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ большоС сообщСство хипстСров Π² нашСй отрасли β€” это Π²Π°ΠΆΠ½ΠΎ.

JUG.ru: Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π’Π°Π΄ΠΈΠΌ ЦСсько ΠΈΠ· Одноклассников ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ async-profiler Π½Π° macOS?

АндрСй: Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ perf events. Linux-спСцифичный Π²Ρ‹Π·ΠΎΠ² сломал ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ macOS. Но Π΅ΡΡ‚ΡŒ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π½Π° днях я Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π» с Норманом ΠœΠ°ΡƒΡ€Π΅Ρ€ΠΎΠΌ ΠΈΠ· Apple (Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Netty), Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ интСрСсСн async-profiler, ΠΈ ΠΎΠ½ любСзно согласился ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Mac-ΠΏΠΎΡ€Ρ‚.

JUG.ru: Π’ июлС Π² async-profiler появился ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ Ρ…ΠΈΠΏΠ° β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± этом?

АндрСй: БущСствуСт Π΄Π²Π° основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ памяти Π² Java. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” это инструмСнтация Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. Но для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-систСм ΠΎΠ½ уТасСн, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‡Π΅Π²Π½ΠΎ сказываСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Ряд ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ компилятора пСрСстаёт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Escape Analysis большС Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ Π² Ρ…ΠΈΠΏΠ΅.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” использованиС DTrace probes, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° стартС JVM.

Но это Π½Π΅ всё. Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, основанный Π½Π° сэмплировании TLAB (Thread Local Allocation Buffer). Он Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Java Mission Control / Java Flight Recorder, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ коммСрчСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Oracle JDK, Π° с OpenJDK Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Google, Π½ΠΎ Ρ‚Π°ΠΌ трСбуСтся сборка ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии JVM.

Π― Π½Π°ΡˆΡ‘Π» способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ»Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС, с OpenJDK. БСйчас Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² подробности, Π½ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ расскаТу.

Нитсан: Π― Π΄ΡƒΠΌΠ°ΡŽ, это Π²Π°ΠΆΠ½ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Java Mission Control сСйчас, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, СдинствСнный инструмСнт для ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ процСссами Π² JMC Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΡ‡Π΅Π½ΡŒ своСобразно, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди просто Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. НадСюсь, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ ΡΡ‚Π°Ρ‚ΡŒ мСйнстримом.

JUG.ru: ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΠ΄Π²ΠΈΠΆΠΊΠΈ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ происходят Π² 2017-ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π³ΠΎΠ΄Ρ‹ Π½Π°Π·Π°Π΄. Π’ Ρ‡Ρ‘ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ?

АндрСй: Java β€” ΠΊΠΎΡ€Π΅Π½ΡŒ всСх Π·ΠΎΠ» πŸ™‚ Она Π΄Π΅Π»Π°Π΅Ρ‚ Тизнь ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π»ΡƒΡ‡ΡˆΠ΅, ΠΈ Ρ…ΡƒΠΆΠ΅. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΈΠ·-Π·Π° особСнностСй JVM стандартныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ становятся Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” JVM прСдоставляСт свои собствСнныС API для профилирования.

Нитсан: Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΈΡ€ Java ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Windows. Windows Π±Ρ‹Π»Π° уТасной ОБ (вСроятно, сСйчас ΠΊΡƒΠ΄Π° Π»ΡƒΡ‡ΡˆΠ΅), Π½ΠΎ, страдая ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… нСдостатков, ΠΎΠ½Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅Π»Π° большой успСх. Π’Π° ΠΆΠ΅ история ΠΈ с Java. Π’ случаС с инструмСнтами профилирования Ρƒ Java ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠ»ΠΎΡ…ΠΎ. Π― Π½Π΅ совсСм ΡƒΠ²Π΅Ρ€Π΅Π½ Π² Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ JVM Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ использовали Solaris Studio, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ всё Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½ΠΈΡ…. БпСциалисты использовали спСциализированныС инструмСнты. А Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π»ΠΈ.

Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Java ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. НативноС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π² Solaris Studio, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ Π½ΠΈΡˆΠ΅Π²Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, становится всС Π±ΠΎΠ»Π΅Π΅ популярным.

АндрСй: Π‘Ρ‡ΠΈΡ‚Π°ΡŽ Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Java Π½Π΅ Ρ€Π°Π²Π½ΠΎ HotSpot, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ JVM ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Ρ‹ ΠΊ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°ΠΌ.

Нитсан: ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил, Π½ΠΎ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ JVM ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ? Π― знаю ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Zing, ΠΈ Ρƒ мСня Π΅ΡΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с IBM J9…

АндрСй: БСйчас Π½Π° ΠΌΠ½Π΅ Ρ„ΡƒΡ‚Π±ΠΎΠ»ΠΊΠ° Excelsior JET, ΠΈ поэтому я вспомнил ΠΎΠ± этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Он ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Java Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ, насколько я знаю, ΠΎΡ‚ safepoint bias Π½Π΅ страдаСт.

Нитсан: А, ΠΎΠΊ. Никогда этим Π½Π΅ пользовался. Полагаю, Ρ‡Ρ‚ΠΎ Π² этом случаС ΠΌΠΎΠΆΠ½ΠΎ сразу Π±Ρ€Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€.

JUG.ru: AsyncGetCallTrace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ async-profiler ΠΈ Honest Profiler, Π½Π΅ являСтся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ API. НС ощущаСтся Π»ΠΈ Π΅Π³ΠΎ использованиС Β«Ρ…Π°ΠΊΠΎΠΌΒ»? НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚Π΅ΡΡŒ Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ? Помогла Π±Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Oracle Π² вопросах профилирования?

Нитсан: AsyncGetCallTrace Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΅Ρ‰Ρ‘ с запуска OpenJDK 6, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всСгда Π±Ρ‹Π» ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Β«Π½Π΅Π·Π°ΠΊΠΎΠ½Π½ΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π±Π΅Π½ΠΎΠΊΒ», Π½ΠΎ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·ΡΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ. Когда Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ становится ΠΎΠΏΡ†ΠΈΠ΅ΠΉ JVM, это Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°ΡŽ, Π½Π°ΠΌ Π½Π΅ стоит слишком Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎΠ± этом. Π₯отя ΠΌΠ½Π΅ интСрСсно, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ AsyncGetCallTrace уТиваСтся с Π½ΠΎΠ²Ρ‹ΠΌ компилятором Graal.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΠΌΠΎΠ³Π»Π° Π±Ρ‹. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Oracle прСдоставляСт JMC Π² качСствС ΠΏΠ»Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, Π° всСму ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Java-ΠΌΠΈΡ€Ρƒ остаётся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ VisualVM. БСйчас Π² этом дСньги. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Oracle испытываСт ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ интСрСсов: интСрСсы Java, с ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΈ ΠΈΡ… собствСнныС β€” с Π΄Ρ€ΡƒΠ³ΠΎΠΉ. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Π½ΠΈΡ… ΠΏΠΎΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… JVM-ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ΡŒ собствСнноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π― Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ·-Π·Π° этого. Π― понятия Π½Π΅ имСю, Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ сСйчас хотят. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ΠΈ ΡΠ΄Π΅Π»Π°ΡŽΡ‚ доступными для всСх Π²Π΅Ρ‰ΠΈ Π²Ρ€ΠΎΠ΄Π΅ JMC. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Jigsaw Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

АндрСй: Π‘ΠΎΠ³Π»Π°ΡˆΡƒΡΡŒ, Ρ‡Ρ‚ΠΎ AsyncGetCallTrace β€” отчасти «хакСрский» API. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ: я ΠΈ сам сообщал ΠΎ Π±Π°Π³Π°Ρ…. Но ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ это Π»ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² HotSpot JVM.

JUG.ru: А ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π²Π΅Ρ‰Π΅ΠΉ Π²Ρ€ΠΎΠ΄Π΅ AsyncGetCallTrace, ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ Тизнь создатСлям ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ²?

АндрСй: Π”Π°. НСдавно Π² списках рассылки HotSpot ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π΄Π°ΠΆΠ΅ появился ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ JEP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ стандартизованный API для сэмплирования Ρ…ΠΈΠΏΠ°. Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ Π² рассылках ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ JEP β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Java 11…

JUG.ru: Π§Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Java-профилирования нСзависимо ΠΎΡ‚ дСйствий Oracle? ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ станут Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ сСйчас?

АндрСй: ΠžΡ‡Π΅Π½ΡŒ Π½Π° это надСюсь. Π’ своих Π΄ΠΎΠΊΠ»Π°Π΄Π°Ρ… я ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π΄ΠΎΠ½ΠΎΡΠΈΡ‚ΡŒ Π΄ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ сСйчас, Π΅ΡΡ‚ΡŒ большиС ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ. НуТно Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ слСдуСт Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΈΡ… нСдостатках ΠΈ Π»ΠΎΠ²ΡƒΡˆΠΊΠ°Ρ…. И Π΄ΡƒΠΌΠ°ΡŽ, ΠΊΠΎΠ³Π΄Π° большС людСй ΠΎΡΠΎΠ·Π½Π°ΡŽΡ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ этих инструмСнтов примутся ΠΈΡ… ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ.

НитcΠ°Π½: Π’ рядС вопросов Π΅ΡΡ‚ΡŒ ΠΊΡƒΠ΄Π° расти. Π‘ perf-map-agent ΠΌΡ‹ ΠΎΠ±Ρ€Π΅Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π½ΠΎ пСрСйдя ΠΊ async-profiler, снова Π΅Ρ‘ тСряСм. МнС Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Ρ‘ снова Π²ΠΎΠΏΠ»ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΉ.

Другая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ β€” визуализация. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ async-profiler ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ прилоТСниями, Π³Π΄Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ задСйствуСт 100% CPU, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ просто висят Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. МСня ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ сущСствуСт мноТСство ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

АндрСй: Π”Π°. БСгодня FlameGraph ΠΎΡ‡Π΅Π½ΡŒ популярСн Π² качСствС Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ я Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π΅Π½.

JUG.ru: Π’Ρ‹ ΠΎΠ±Π° ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ (Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°Ρ… ΠΈ Π±Π»ΠΎΠ³-постах), Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ°ΠΆΡ‘Π½Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Π‘Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹, Ρ‡Ρ‚ΠΎ отрасли сильно Π²Ρ€Π΅Π΄ΠΈΡ‚ использованиС людьми этой искаТённой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹? ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ индустрии ΠΎΡ‚ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³Π΄Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ большС Π²Ρ€Π΅Π΄Π°, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·Ρ‹?

Нитсан: Π”Π°, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π²Ρ€Π΅Π΄ΠΈΡ‚ индустрии. Если Π²Ρ‹ посмотритС Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ обсуТдСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎ Π±ΡƒΠ»ΡˆΠΈΡ‚Π°. И ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅Π³ΠΎ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ слоТно Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

НСкоторыС люди Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ оказываСтся Π² HashMap. И ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΡƒΠΌΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ HashMap ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΈΠΌ этого Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚. Π― Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² ΠΈΡ… случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Π½Ρ‘ΠΌ, Π½ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ, ΠΎΠ½ΠΈ ΠΎΠ± этом Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ·Π½Π°ΡŽΡ‚. А ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ смотрят Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊ расхода Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ CPU, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° GC. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ случаС, Ссли Β«Π±ΡƒΡ‚Ρ‹Π»ΠΎΡ‡Π½Ρ‹ΠΌ Π³ΠΎΡ€Π»Ρ‹ΡˆΠΊΠΎΠΌΒ» Ρƒ Π½ΠΈΡ… оказался GC, ΠΎΠ½ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ смогут этого ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ.

АндрСй: Π― согласСн с Нитсаном, Π½ΠΎ добавлю, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ хотя Π±Ρ‹ ΠΏΠ»ΠΎΡ…ΠΎΠΉ инструмСнт, Ρ‡Π΅ΠΌ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ. Главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π½Π΅ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΏΡ€ΠΈΠ²ΠΈΡ€Π°Π΅Ρ‚, Π° ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совсСм. МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚, хотя Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ кроСтся Π² нСэффСктивных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ…, ΠΈ любой ΡΡΠΌΠΏΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ Π΅Ρ‘ Π»Π΅Π³ΠΊΠΎ выявит.

Нитсан: Π― согласСн, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди Π½Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚, ΠΈ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Но Ссли СдинствСнным вашим инструмСнтом оказываСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ профайлСр… Π’Ρ‹ смотритС Π½Π° Π½Π΅Π³ΠΎ, Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ бСссмыслицу, ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ: Β«Π›ΡƒΡ‡ΡˆΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ просто ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈΒ», Ρ‚Π°ΠΊΠΈΠΌ Ρƒ вас получаСтся Π²Ρ‹Π²ΠΎΠ΄, ΠΈ нСслоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΎΡ‚Π±ΠΈΠ²Π°Π΅Ρ‚ Ρƒ людСй ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹.

JUG.ru: Π—Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с Java-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΌ всСм Π½Π°Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ инструмСнтов, Π½ΠΎ ΠΈ Π½Π°Π΄ знаниями сообщСства ΠΎ Π½ΠΈΡ…?

Нитсан: Π”Π°. Π― Π΄ΡƒΠΌΠ°ΡŽ, ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Π°Ρ история успСха Π² Java-ΠΌΠΈΡ€Π΅ β€” это JMH, Java Microbenchmarking Harness. И ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с тСхнологичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π½ΠΎ ΠΈ Π² аспСктС обучСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, прСдоставлСния ΠΈΠΌ возмоТности Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этой ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ.

Π”ΡƒΠΌΠ°ΡŽ, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ АндрСй ΠΈ создаёт инструмСнты, ΠΈ рассказываСт людям, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ.

АндрСй: Π”Π°ΠΆΠ΅ самыС ΠΌΠΎΡ‰Π½Ρ‹Π΅ инструмСнты Π±ΡƒΠ΄ΡƒΡ‚ бСсполСзны, Ссли Π½Π΅ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π‘ Ρ‚Π΅ΠΌ ΠΆΠ΅ JMH: я ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ люди писали Π΅Ρ€ΡƒΠ½Π΄Ρƒ Π² JMH, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹. ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ являСтся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ успСха.

JUG.ru: Π’Ρ‹ ΠΎΠ±Π° ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ этому ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ своими Π΄ΠΎΠΊΠ»Π°Π΄Π°ΠΌΠΈ Π½Π° блиТайшСм Joker, ΠΈ Π²Ρ‹ ΠΎΠ±Π° ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ Π½ΠΎΠ²Ρ‹Π΅ вСрсии Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ², Ρ€Π°Π½Π΅Π΅ прСдставлСнных Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… конфСрСнциях. Π’ Ρ‡Ρ‘ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π½ΠΎΠ²ΠΈΠ·Π½Π°?

Нитсан: ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я прСдставил Π½Π° QCon Π΄ΠΎΠΊΠ»Π°Π΄ β€œProfilers are lying hobbitses”, я ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ самоС Π»ΡƒΡ‡ΡˆΠ΅Π΅ Π² Π½Ρ‘ΠΌ β€” это Π½Π°Π·Π²Π°Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π½ΠΎ сам Π΄ΠΎΠΊΠ»Π°Π΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. ΠœΡ‹ снова Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°Ρ… ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ввСсти нас Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ, Π΄ΡƒΠΌΠ°ΡŽ, я Π½Π°Ρ‡Π½Ρƒ с самого ΠΌΡ€Π°Ρ‡Π½ΠΎΠ³ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΊΠ°Ρ€Π°Π±ΠΊΠ°Ρ‚ΡŒΡΡ. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π΄ΠΎΠΊΠ»Π°Π΄ Π±Ρ‹Π» сСриСй ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ², ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡˆΠΈΡ… ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ Β«Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β». Π’ этот Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ: Β«Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ посмотрим, ΠΊΠ°ΠΊ Π½Π°ΠΌ с этим ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡΒ».

АндрСй: Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ истории async-profiler, Π½Π°Ρ‡Π°Ρ‚ΠΎΠΉ Π½Π° JPoint 2017. Однако ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ с ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ большоС сходство ΠΌΠΎΠ΅Π³ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π° с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ Нитсана, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я Ρ€Π΅ΡˆΠΈΠ» Π²Π·ΡΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ. Пока Ρ‡Ρ‚ΠΎ я Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚, Π½ΠΎ Π² блиТайшСС врСмя Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Joker 2017 ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΌΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΊΠ»Π°Π΄! Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ слСдитС Π·Π° обновлСниями.


Java-конфСрСнция Joker, Π³Π΄Π΅ выступят Нитсан ΠΈ АндрСй, состоится Π² ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³Π΅ 3-4 ноября. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, послС Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² спикСры Joker ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² дискуссионных Π·ΠΎΠ½Π°Ρ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡ… ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΠΈΡ‡Π½ΠΎ. А ΠΏΠΎΠΌΠΈΠΌΠΎ АндрСя ΠΈ Нитсана, Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ дСсятки Π΄Ρ€ΡƒΠ³ΠΈΡ… спикСров β€” Π½Π° сайтС ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (ΠΈ приобрСсти Π±ΠΈΠ»Π΅Ρ‚).

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java Π² IDE NetBeans

IDE NetBeans Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт профилирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволят ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ свСдСния ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния Π²ΠΎ врСмя выполнСния. БрСдство профилирования NetBeans позволяСт просто ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ЦП ΠΈ использованиС памяти ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² срСдС IDE; ΠΎΠ½ΠΎ потрСбляСт ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов.

Π­Ρ‚ΠΎΡ‚ Π²Π²ΠΎΠ΄Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΎΠ±Π·ΠΎΡ€ срСдства профилирования, входящСго Π² состав срСды IDE, ΠΈ руководство, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ быстро ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² NetBeans. Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ профилирования, доступныС Π² срСдС IDE, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ Π½Π΅ΠΉ Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ профилирования срСды IDE, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ освСщСна интСрпрСтация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ использованиС срСдства профилирования для получСния Π΄Π°Π½Π½Ρ‹Ρ… профилирования ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прилоТСния Anagram Game, простого прилоТСния Java, входящСго Π² состав срСды IDE. Π₯отя Anagram Game β€” это ΠΎΡ‡Π΅Π½ΡŒ простой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ прилоТСния Java, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ дСйствия.

Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС срСды IDE для профилирования прилоТСния ΠΈ получСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования:

  • ПовСдСниС прилоТСния ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ
  • ВрСмя ЦП, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ прилоТСния
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ сравнСниС снимков Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‹Π»ΠΊΠΈ

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ знаниями ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ тСхнологиям ΠΈΠ»ΠΈ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ программирования с ΠΈΡ… использованиСм:

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java
  • IDE NetBeans

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ курсом.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ курсом Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ установлСно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании срСдства профилирования срСдС IDE Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для обСспСчСния получСния Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ срСдства с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, создадим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ AnagramGame, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΡƒ. Π‘Ρ€Π΅Π΄Π° IDE автоматичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° AnagramGame.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Anagram Game. Для этого Π²Π°ΠΌ сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мастСр создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² для создания ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° прилоТСния ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Для создания прилоТСния Anagram Game Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

  1. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ «Π€Π°ΠΉΠ» > Новый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚» (CTRL+SHIFT+N; &#8984+SHIFT+N Π² Mac ОБ) Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню.
  2. Π’ мастСрС создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ «ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ > Java».
  3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ «Anagram Game». НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”Π°Π»Π΅Π΅».
  4. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ мСстополоТСниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ».

    ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π“ΠΎΡ‚ΠΎΠ²ΠΎ» срСда IDE создаСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Anagram Game.

  5. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ’ > ‘ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ основной ΠΏΡ€ΠΎΠ΅ΠΊΡ‚’ > AnagramGame Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню.

ПослС настройки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊ основного имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Anagram Game Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ Π² ΠΎΠΊΠ½Π΅ ‘ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹’. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ использовании срСды IDE для профилирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° срСда IDE ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½ Π² качСствС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ, срСда IDE Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±Ρ€Π°Π½ Π² ΠΎΠΊΠ½Π΅ ‘ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹’.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ использованиС срСдства профилирования

Для получСния Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для профилирования. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС срСдства профилирования, ΠΈΠ»ΠΈ Ссли допустимыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ нСдоступны для Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, срСда IDE запросит Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ процСсс ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ для вашСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

ΠšΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Однако ΠΏΡ€ΠΈ внСсСнии Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°Ρ†ΠΈΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΡƒ. ΠšΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² любоС врСмя, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

  1. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ > Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ Π² мСню ‘ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ’.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Java. НаТмитС ‘ΠšΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²Π°Ρ‚ΡŒ’.

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ появится Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. МоТно Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ. Π”Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ .nbprofile Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈ использовании NetBeans IDE 7.4 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ вСрсии Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ > Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΡƒ срСдства профилирования Π² мСню ‘ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ’ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Java Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ‘Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java для ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ’.

Π’Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ΠΈ профилирования

Π‘Ρ€Π΅Π΄Π° IDE прСдоставляСт ряд Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ профилирования Π² соотвСтствии с вашими трСбованиями. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ расход рСсурсов Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° счСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ объСма созданной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Однако ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ со мноТСством доступных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΡƒΠΊΠ°

Руководство ΠΏΠΎ Java Profilers


1. ΠžΠ±Π·ΠΎΡ€

  • Иногда написаниС ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто запускаСтся, нСдостаточно. ** Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ распрСдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ, послСдствия использования ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° кодирования ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, послСдствия ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ выполнСния, области ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Ρ‚. Π”. ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ для этого.

Java Profiler — это инструмСнт,

ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ конструкции ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Java Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ JVM

. Π­Ρ‚ΠΈ конструкции ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ выполнСния (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹), Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ сборку мусора.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим основныС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ Java:


2. JProfiler

JProfiler — Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Благодаря ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятному ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ интСрфСйсу JProfiler прСдоставляСт интСрфСйсы для просмотра ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы, использования памяти, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΈ профилирования ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ — Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ систСмС.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит интСрфСйс JProfiler:

ссылка:/uploads/1-jprofiler-overview-probing.png[ΠžΠ±Π·ΠΎΡ€Π½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€ JProfiler с функциями]

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот инструмСнт ΠΊΠ°ΠΊ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ для ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ

ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прилоТСния Java, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π±Π΅Π· нСобходимости ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ

.

JProfiler Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт

Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… SQL ΠΈ NoSQL

. Он обСспСчиваСт ΠΎΡΠΎΠ±ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для профилирования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… JDBC, JPA/Hibernate, MongoDB, Casandra ΠΈ HBase.

На снимкС экрана Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ интСрфСйс ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ JDBC со списком Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… соСдинСний:

ссылка:/uploads/2-jprofiler-database-probing-1.png[ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… JProfiler]

Если ΠΌΡ‹ заинтСрСсованы Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ

Π΄Π΅Ρ€Π΅Π²Π΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² взаимодСйствий с нашСй Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ

соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹

, JProfiler прСкрасно с этим справится.

Live Memory — это ΠΎΠ΄Π½Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ JProfiler, которая позволяСт

Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ использованиС памяти нашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ

. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ использованиС памяти для объявлСний ΠΈ экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

Π’ случаС Π΄Π΅Ρ€Π΅Π²Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² распрСдСлСния ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ просмотр Π΄Π΅Ρ€Π΅Π²Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΆΠΈΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², собранных мусором, ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠΈΡ…. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ это Π΄Π΅Ρ€Π΅Π²ΠΎ распрСдСлСния Π±Ρ‹Ρ‚ΡŒ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ»ΠΈ для всСх классов.

На ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ экранС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти всСми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ с количСством экзСмпляров:

ссылка:/uploads/3-jprofiler-live-memory.png[JProfiler просмотр ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти]

JProfiler ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚

ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с популярными срСдами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Eclipse, NetBeans ΠΈ IntelliJ. МоТно Π΄Π°ΠΆΠ΅

ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ снимка ΠΊ исходному ΠΊΠΎΠ΄Ρƒ

!


3. YourKit

YourKit Java Profiler Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ прСдоставляСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ установки для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы (Windows, MacOS, Linux, Solaris, FreeBSD ΠΈ Ρ‚. Π”.).

Как ΠΈ JProfiler, YourKit ΠΈΠΌΠ΅Π΅Ρ‚ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², сборок мусора, использования памяти ΠΈ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти, с

ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ локального ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ профилирования Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΡƒΠ½Π½Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ssh

.

Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования памяти сСрвСрного прилоТСния Tomcat:

ссылка:/uploads/4-yourkit-tomcat-profiling-memory.png[ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти YourKit Java Profiler сСрвСрного прилоТСния Tomcat]

YourKit Ρ‚Π°ΠΊΠΆΠ΅ пригодится Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ

ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π±Ρ‹Π»ΠΈ сгСнСрированы, ΠΈ сколько Ρ€Π°Π· ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ происходило.

YourKit ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½ΡƒΡŽ

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ профилирования процСссора, которая позволяСт ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… областях нашСго ΠΊΠΎΠ΄Π°

, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ условноС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«Ρ‡Ρ‚ΠΎ, Ссли».

На рисункС 5 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйса профилирования ΠΏΠΎΡ‚ΠΎΠΊΠ°:

ссылка:/uploads/5-yourkit-threads-profiling.png[Рисунок 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:

ссылка:/uploads/6-visualvm-overview.png[ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ локального tomcat-сСрвСра Java VisualVM]

Одним ΠΈΠ· интСрСсных прСимущСств Java VisualVM являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ

Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй Π² Π²ΠΈΠ΄Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²

. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эти ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Π²ΠΎ встроСнный Ρ†Π΅Π½Ρ‚Ρ€ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Java VisualVM.

Java VisualVM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚

локальноС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΈ процСссора.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ прилоТСниям Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ прСдоставлСния ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

(имя хоста/IP ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΡ€ΠΈ нСобходимости)

, Π½ΠΎ Π½Π΅ обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ туннСлирования ssh

. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ

ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌΠΈ обновлСниями

(ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 2 сСкунды).

НиТС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ внСшний Π²ΠΈΠ΄ памяти Java-прилоТСния, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Java VisualVM:

ссылка:/uploads/7-visualvm-sample-memory.png[Гистограмма ΠΊΡƒΡ‡ΠΈ памяти Java VisualVM]

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… снимков Java VisualVM ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ

ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снимки сСансов профилирования для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°

.


5. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ NetBeans

NetBeans Profiler

поставляСтся Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Oracle IDE NetBeans с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ

.

Π₯отя этот ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ

ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Java VisualVM

, это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π±Ρ‹Π»ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (IDE Profiler).

ВсС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, рассмотрСнныС Π²Ρ‹ΡˆΠ΅, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ IDE.

На ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ снимкС экрана ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйса NetBeans Profiler:

ссылка:/uploads/8-netbeans-telemetry-view.png[Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ Netbeans Profiler]

Netbeans Profiler Ρ‚Π°ΠΊΠΆΠ΅ являСтся

Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ для ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ профилирования

. NetBeans Profiler прСдоставляСт Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ для настройки ΠΈ управлСния сСансом профилирования ΠΈ отобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ

Π›ΡƒΡ‡ΡˆΠΈΠΉ ΠΈ бСзопасный Java Profiler для использования Π² производствС? [Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ]

Π― ΠΈΡ‰Ρƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Java для использования Π² производствСнной срСдС с ΠΎΡ‡Π΅Π½ΡŒ высоким спросом, коммСрчСской ΠΈΠ»ΠΈ бСсплатной, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ всСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям:

  • лСгкая интСграция с ΠΊΠΎΠ΄ΠΎΠΌ (Π±Π΅Π· пСрСкомпиляции со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ опциями, Π±Π΅Π· ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… ΠΊΡ€ΡŽΡ‡ΠΊΠΎΠ² ΠΈ Ρ‚. Π΄.). ΠžΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ .Π±Π°Π½ΠΊΠΈ рядом с ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния Π² порядкС.
  • Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ JVM Π±Π΅Π· пСрСзапуска прилоТСния.
  • для профилирования Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, Π½Π΅ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
  • ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠžΡ‡Π΅Π½ΡŒ нСбольшоС ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ.
  • Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ всС «ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅» Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ-врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ горячиС Ρ‚ΠΎΡ‡ΠΊΠΈ,Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° / ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΈ Ρ‚. Π΄.

ΠΏΠΎ сути, ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΈΠ΄Π΅Ρ‚ΡŒ Π² спячкС Π² производствС, ΠΊΠΎΠ³Π΄Π° всС Π² порядкС, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π΅ заботится ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ смоТСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ Ρ…Π»ΠΎΠΏΠΎΡ‚ (ΠΈ сниТСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ) бСсплатно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ горячиС Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ синхронизации.

10 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²


Π²Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ YourKit? Он ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅.


Java VisualVM-это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс для просмотра ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ прилоТСниях Π½Π° основС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Java (Java applications) Π²ΠΎ врСмя ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Java (JVM). Java VisualVM ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ JVM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ срСдствами Java Development Kit (JDK), ΠΈ прСдставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ позволяСт быстро ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… прилоТСниях Java. МоТно ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… прилоТСниях ΠΈ прилоТСниях, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ гостСй. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии JVM ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² локальной систСмС, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ поставляСтся с Oracle JDK IT self…

$ jvisualvm 

14

Π°Π²Ρ‚ΠΎΡ€: Prabath Siriwardena



ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Java Flight Recorder. Π­Ρ‚ΠΎ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ графичСский интСрфСйс. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ JVM

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

-XX:StartFlightRecording=name=test,filename=test.jfr,dumponexit=true

ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ запись с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JMC.



Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Eclipse TPTP — Eclipse Test & Performance Tools. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ ΠΎΠ½ для производствСнного использования ΠΈΠ»ΠΈ Π½Π΅Ρ‚, зависит ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для мСня это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈ это соотвСтствуСт вашим потрСбностям.

http://www.eclipse.org/tptp/


Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ -http://www.newrelic.com/. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² производствС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΎΠ½ каТСтся довольно Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΈ эффСктивным. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π² настройкС (ΠΎΠ΄ΠΈΠ½ .опция ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки jar ΠΈ A-agent).



Fusionreactor Java Application Performance Monitor, Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Java Profiler ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ своСго ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
http://www.fusion-reactor.com/production-java-profiler/
FusionReactor ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚, ΠΈ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ бСсплатная 14-днСвная пробная вСрсия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

1

Π°Π²Ρ‚ΠΎΡ€: David Tattersall


посмотри Java Mission Control Π² сочСтании с Бамописцам. Начиная с выпуска Oracle JDK 7 Update 40 (7u40), Java Mission Control поставляСтся Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с HotSpot JVM, поэтому ΠΎΠ½ высоко ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° нСбольшоС влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя выполнСния. Он ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°ΠΊ Callgrind.

1

Π°Π²Ρ‚ΠΎΡ€: Muxiang Yang


ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ

Java Profiler — YourKit

ΠžΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π³Ρ€Π°Π΄Π°ΠΌΠΈ Java Profiler

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ЦП ΠΈ памяти Java Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊΠΈΠΌ простым ΠΈ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
YourKit Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ способ профилирования Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π°
стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ производства, принося бСспрСцСдСнтныС прСимущСства
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Java.

Π“ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ вашим Π·Π°Π΄Π°Ρ‡Π°ΠΌ

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ сСрвСров Java,
Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, локально ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ.Π˜ΡΡΠ»Π΅Π΄ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π² срСдах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, тСстирования ΠΈ производства.

ВСсная интСграция с вашСй IDE

ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ для Eclipse, IntelliJ IDEA ΠΈ IDE NetBeans ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚
ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх Π²ΠΈΠ΄ΠΎΠ² Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅
умная навигация ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования Π΄ΠΎ исходного ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΈ локальноС.Когда Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚
всС Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ SSH-доступ.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСссора

YourKit Java Profiler ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ JVM ΠΈ ОБ для
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈ ЦП ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ
Π½Π°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΠΈΠ»ΠΈ списки горячих Ρ‚ΠΎΡ‡Π΅ΠΊ.

Smart Ρ‡Ρ‚ΠΎ Ссли функция позволяСт ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ
ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π±Π΅Π· пСрСпрофилирования
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π“Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΏΠ»Π°ΠΌΠ΅Π½ΠΈ

Π“Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠ»Π°ΠΌΠ΅Π½ΠΈ CPU — эффСктивный способ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ,
Ρ‡Ρ‚ΠΎ позволяСт быстро ΠΈ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Π΅Π±-запросы

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы SQL ΠΈ Π²Π΅Π±-запросы,
Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ популярныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ MongoDB, Cassandra ΠΈ HBase.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΡƒΡ‡Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ позволяСт ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ
Π³Ρ€Π°Ρ„ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² любом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Бвойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ
Ρ„ΠΎΡ€ΠΌΠ°. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ содСрТимоС HashMap ΠΈΠ»ΠΈ
Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, сколько памяти ΠΎΠ½ сохраняСт ΠΈ Ρ‡Ρ‚ΠΎ происходит.
ΠΊΠΎΠ³Π΄Π° конкрСтная ссылка Π² Π³Ρ€Π°Ρ„Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ сущСствуСт.Π­Ρ‚ΠΎ экономит вашС врСмя ΠΈ позволяСт ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ исправлСниС ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти Π±Π΅Π· измСнСния
ΠΊΠΎΠ΄.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ снимков процСссора ΠΈ памяти

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ измСнСния Π² ΠΊΠΎΠ΄Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
вашСго прилоТСния.

YourKit Java Profiler ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ снимки памяти
ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ….

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° эффСктивности

40+ комплСксных ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΆΠ΄ΡƒΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹
ΠΊΠΎΠ΄ быстрСС ΠΈ эффСктивнСС.

Profiler ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… Π² Java-прилоТСниях.
ΠΈ автоматичСски Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΡ….
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹,
Π½Π΅Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ SQL ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.
ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ нСэффСктивныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.

Найти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

YourKit Java Profiler Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ
ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹.

Π’ случаС Ρ‚ΡƒΠΏΠΈΠΊΠ° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚
ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΈ задСйствованных
ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹.

МоТно ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с HTTP-запросами ΠΈ SQL-запросами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ
полная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ запросы ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ вашими прилоТСниями.

ВСлСмСтрия ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ настраиваСмый интСрфСйс.
для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ЦП, памяти, активности сборщика мусора ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

МассивноС Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ — распространСнная, Π½ΠΎ часто скрытая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
YourKit Java Profiler Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС мСста, Π³Π΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ДСобфускация ΠΊΠΎΠ΄Π° Π½Π° Π»Π΅Ρ‚Ρƒ

YourKit Java Profiler ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ исходныС ΠΈΠΌΠ΅Π½Π° классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ProGuard, yGuard, Zelix KlassMaster, Allatori,
ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ популярныС Java-обфускаторы.Если Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠΎΠ΄ для Minecraft, просто
Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΡƒ свой Ρ„Π°ΠΉΠ» сопоставлСния MCP, ΠΈ ΠΎΠ½ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ исходныС ΠΈΠΌΠ΅Π½Π°.

Π’Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы

Π’Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ прСдоставляСт ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ
Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ объСм Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ.
НакладныС расходы Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ смоТСтС
ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² производствС.

Экспорт Π²ΠΎ внСшниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ API

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ
ΠΈΡ… Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π² сторонних прилоТСниях.

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ API позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС Π·ΠΎΠ½Π΄Ρ‹ ΠΈ
ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ прилоТСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…, Π΄Π΅Π»Π°ΠΉΡ‚Π΅ снимки ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ… прямо с вашСго
Код Java.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мноТСство Π·Π°Π΄Π°Ρ‡ профилирования Π±Π΅Π· использования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.
Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ процСсс ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ДоступноС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π“ΠΈΠ±ΠΊΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ лицСнзирования ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π΅
лицСнзия для ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

ΠœΡ‹ высоко Ρ†Π΅Π½ΠΈΠΌ сообщСство с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ бСсплатныС Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ для
нСкоммСрчСскиС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ прСдлоТСния для ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ.

.

Java VisualVM — прилоТСния для профилирования

Java VisualVM прСдставляСт Π΄Π°Π½Π½Ρ‹Π΅ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²
Π²ΠΊΠ»Π°Π΄ΠΊΠ°, спСцифичная для этого прилоТСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько
Π²ΠΊΠ»Π°Π΄ΠΊΠΈ прилоТСния ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ. КаТдая Π²ΠΊΠ»Π°Π΄ΠΊΠ° прилоТСния содСрТит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ,
ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π’ΠΊΠ»Π°Π΄ΠΊΠ° Profiler прилоТСния позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ
сСанс профилирования локального прилоТСния.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования
отобраТаСтся Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ панСль инструмСнтов для обновлСния
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ сборку мусора ΠΈ сохранитС
Π΄Π°Π½Π½Ρ‹Π΅ профилирования.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ инструмСнт профилирования Π½Π΅ запускаСтся, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹
ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…
Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ профилирования:

  • ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСссора. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ это, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
    ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ это, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ
    использованиС прилоТСния.Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
    ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ классом, Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Когда Π²Ρ‹ запускаСтС сСанс профилирования, Java VisualVM ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ
локальноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ сбор Π΄Π°Π½Π½Ρ‹Ρ… профилирования. ΠΊΠΎΠ³Π΄Π°
доступны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования, ΠΎΠ½ΠΈ автоматичСски ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π²
Π²ΠΊΠ»Π°Π΄ΠΊΠ° ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ.

ИспользованиС ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… профилирования
панСль инструмСнтов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ профилирования:

  • ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ автоматичСски. Когда Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, отобраТаСтся
    Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
    (ΠΎΠΊΠΎΠ»ΠΎ 2 сСкунд).
  • ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сСйчас. НаТмитС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹
    Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.
  • Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сборку мусора. НаТмитС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ мусор
    коллСкция.
  • Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ собранныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. НаТмитС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΡƒΠΆΠ΅
    Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования.
  • Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ снимок. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снимок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ
    Π΄Π°Π½Π½Ρ‹Π΅ профиля. Когда Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ снимок, снимок открываСтся Π²
    новая подвкладка.
  • Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²ΠΈΠ΄. НаТмитС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²ΠΈΠ΄
    Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»Π° изобраТСния .png. Когда Π²Ρ‹ Ρ‰Π΅Π»ΠΊΠ°Π΅Ρ‚Π΅
    ΠΊΠ½ΠΎΠΏΠΊΠ° Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ мСсто, Π³Π΄Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅
    сохранитС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования

ПолС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΏΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ профилирования позволяСт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ
ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² соотвСтствии с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π§Ρ‚ΠΎΠ±Ρ‹
ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π² ΠΏΠΎΠ»Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°,
Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Return.Π’Ρ‹ моТСшь Π²ΠΈΠ΄Π΅Ρ‚ΡŒ
ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ условия Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² стрСлку справа
поля Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ИзмСнСниС настроСк профилирования

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ профилирования Java VisualVM прСдоставляСт настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для
ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‹Π±Ρ€Π°Π²
установив Ρ„Π»Π°ΠΆΠΎΠΊ Настройки Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
настройки профилирования ΠΏΡ€ΠΈ отсутствии сСанса профилирования
прогрСсс.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ЦП

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° профиля Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ЦП Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (врСмя выполнСния), ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΈ
количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ прилоТСния
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Java VisualVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ событиС Β«Π²Π²ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β», ΠΊΠΎΠ³Π΄Π°
Π²Π²ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ созданиС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Β«Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β»
событиС ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Оба эти события содСрТат
ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π‘Π½ΠΈΠΌΠΎΠΊ экрана Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Profiler, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования CPU

Π‘Π½ΠΈΠΌΠΎΠΊ экрана Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Profiler, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ настройки профилирования CPU

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти

Когда Π²Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ использованиС памяти, запускаСтся Java VisualVM.
инструмСнтируСт Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ классы ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ количСство
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ классом (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ классы массивов) Π²
Π’Π°Π±Π»ΠΈΡ†Π°.Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² настоящСС врСмя класса Π² Java Virtual
Machine (JVM), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ количСство
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°Ρ‡Π°Π»Π° сСанса профилирования. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, достиТСния
автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ размСщСния Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ появлСния Π½ΠΎΠ²Ρ‹Ρ…
классы Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹.

Java VisualVM ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΊ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅
число ΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹
Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π±Π°ΠΉΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅
ΠΎΠ±Ρ‰Π΅Π΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ², Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ классом.

Π‘Π½ΠΈΠΌΠΎΠΊ экрана Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Profiler, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ профилирования памяти

Π‘Π½ΠΈΠΌΠΎΠΊ экрана Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Profiler, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ настройки профилирования памяти

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ снимков ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

Java VisualVM позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ снимки ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° для Π·Π°Ρ…Π²Π°Ρ‚Π°
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сСанса профилирования. Π‘Π½ΠΈΠΌΠΎΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания снимка. Π’Π·ΡΡ‚ΡŒ
снимка, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ снимок собранных Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²
панСль инструмСнтов Π²ΠΎ врСмя сСанса профилирования.Когда Π²Ρ‹ Π±Π΅Ρ€Π΅Ρ‚Π΅
снимок, снимок откроСтся Π² Π²ΠΈΠ΄Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ прилоТСния. А
ΡƒΠ·Π΅Π» для ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ снимка Ρ‚Π°ΠΊΠΆΠ΅ отобраТаСтся ΠΏΠΎΠ΄ ΡƒΠ·Π»ΠΎΠΌ прилоТСния Π²
Окно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ снимка профилирования памяти

Π‘Π½ΠΈΠΌΠΎΠΊ экрана с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ снимком профилирования процСссора

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ снимках ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° см. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…
Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

.ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

— Какой ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Java Π»ΡƒΡ‡ΡˆΠ΅: JProfiler ΠΈΠ»ΠΈ YourKit?

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

Загрузка…

.

YourKit Java Profiler Help — Запуск ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ….

Π­Ρ‚ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
соотвСтствСнно.

АгСнт ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ локальноС ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅, Π°Π³Π΅Π½Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π² JVM.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ 1. ЗапуститС JVM с Π°Π³Π΅Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ рСкомСндуСтся , Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ обСспСчиваСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ возмоТностСй профилирования.
Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, см. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ‚Π΅ΠΌ:

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ 2. ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ экзСмпляру JVM, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ Π±Π΅Π· Π°Π³Π΅Π½Ρ‚Π°

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π°Π³Π΅Π½Ρ‚Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ экзСмпляру JVM ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅,
ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ профилирования:
любоС Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ запросу.

Однако ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ JVM Π½Π΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ,
ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ профилирования нСдоступны .

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠΈ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ JVM

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ вСрсии Java: Java 7, Java 8, Java 9, Java 10, Java 11, Java 12, Java 13, Java 14.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ JDK:

  • Oracle JDK
  • OpenJDK, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сборки ΠΈΠ·:
    • AdoptOpenJDK
    • Amazon Corretto
    • Azul Zulu
    • BellSoft Liberica JDK
    • JetBrains
    • ΠžΡ€Π°ΠΊΡƒΠ»
    • ΠšΡ€Π°ΡΠ½Π°Ρ шляпа
    • SapMachine
  • IBM JDK ΠΈ OpenJ9

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

AIX

  • AIX, 32-битная Java (ppc) ΠΈ 64-битная Java (ppc64)

FreeBSD

  • FreeBSD 9 ΠΈ Π½ΠΎΠ²Π΅Π΅, i386 ΠΈ amd64 (Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ x86-64).ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅:
    ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСссора всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ врСмя стСны
    ΠΈ тСлСмСтрия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя ЦП — врСмя ЦП процСсса — для всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²,
    ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ FreeBSD Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ процСссорноС врСмя ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

HP-UX

  • HP-UX IA64, 32-разрядная ΠΈ 64-разрядная Java

Linux

Linux, 32-битная Java ΠΈ 64-битная Java:

  • x86 / x86-64
  • ARM, ТСсткий ΠΏΠΎΠΏΠ»Π°Π²ΠΎΠΊ
  • ppc / ppc64 / ppc64le

macOS

  • macOS 10.9 ΠΈ Π½ΠΎΠ²Π΅Π΅, Intel, 64-битная Java

Solaris

  • Solaris 10 ΠΈ Π½ΠΎΠ²Π΅Π΅, x86, 32-битная ΠΈ 64-битная Java
  • Solaris 9 ΠΈ Π½ΠΎΠ²Π΅Π΅, SPARC, 32-битная ΠΈ 64-битная Java

Окна

32-битная Java (x86) ΠΈ 64-битная Java (x86-64):

  • Windows 10, Windows Server 2016, Windows Server 2019
  • Windows 8.1, Windows Server 2012 R2
  • Windows 8, Windows Server 2012
  • Windows 7, Windows Server 2008 R2

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *