Aplikasi Java, terutamanya yang dijalankan dalam pengeluaran, boleh membangunkan prestasi kebocoran, kebuntuan dan kebocoran memori yang boleh mencabar untuk dikesan. Apabila isu ini timbul, penyahpepijatan yang cepat dan berkesan adalah penting untuk memastikan aplikasi berjalan lancar dan untuk mengekalkan pengalaman pengguna yang positif. Di sinilah VisualVM dan JStack menjadi alat yang tidak ternilai untuk pembangun Java.
VisualVM, dengan keupayaan pemprofilan dan pemantauan yang berkuasa, dan jstack, menawarkan pembuangan benang terperinci, ialah duo dinamik yang membolehkan pembangun mengesan, mendiagnosis dan menyahpepijat isu kompleks dengan mudah.
Mendiagnosis dan menyelesaikan kebuntuan adalah kritikal, terutamanya dalam aplikasi berprestasi tinggi. Panduan ini akan meneroka cara mengesan kebuntuan dan mendapatkan buangan benang menggunakan dua alatan Java yang berkuasa: VisualVM dan jstack.
Sebelum menyelami alatan, mari kita jelaskan beberapa asas:
Kebuntuan: Keadaan di mana benang menunggu antara satu sama lain untuk melepaskan sumber, yang membawa kepada kitaran penyekatan yang tidak ditentukan.
Thread Dump: Satu petikan urutan aktif dalam aplikasi Java pada masa tertentu, termasuk butiran tentang keadaan mereka dan sebarang kunci yang mereka tahan atau tunggu. Longgokan benang adalah penting dalam menganalisis dan mengenal pasti sumber kebuntuan dalam aplikasi Java, membolehkan pembangun menentukan punca benang disekat.
VisualVM ialah alat visual yang menyepadukan beberapa alatan JDK baris perintah untuk menyampaikan gambaran keseluruhan aplikasi Java yang komprehensif. Ia digunakan secara meluas untuk memantau dan memprofil aplikasi, mendiagnosis kebocoran memori dan menganalisis prestasi.
Sambung ke proses JVM yang sedang berjalan.
Dalam alat pemantauan, anda boleh mengklik pembuangan benang atau melihat butiran benang dalam masa nyata.
jstack ialah alat baris perintah yang tidak ternilai untuk mana-mana pembangun Java yang berurusan dengan aplikasi kompleks yang banyak bergantung pada urutan. Dengan memberikan cerapan terperinci tentang keadaan benang, gelagat penguncian dan aliran pelaksanaan, jstack memudahkan proses penyahpepijatan, menjadikannya lebih mudah untuk mengesan dan menyelesaikan isu seperti kebuntuan, kesesakan prestasi dan aplikasi terhenti.
Untuk menangkap pembuangan benang bagi aplikasi Java yang sedang berjalan menggunakan jstack, anda memerlukan ID proses (PID) proses Java. Berikut ialah panduan langkah demi langkah:
C:\Program Files\Java\jdk-21\bin>jps -l 12912 22480 org.springframework.ide.vscode.boot.app.BootLanguageServerBootApp 24020 jdk.jcmd/sun.tools.jps.Jps 14344 org/netbeans/Main 21944 deadlock/deadlock.DeadlockExample
C:\Program Files\Java\jdk-21\bin>jstack 21944 2024-11-02 11:12:18 Full thread dump Java HotSpot(TM) 64-Bit Server VM (21.0.5+9-LTS-239 mixed mode, sharing): Threads class SMR info: . .. .... ... "Thread-0" #29 [18484] prio=5 os_prio=0 cpu=0.00ms elapsed=1896.34s tid=0x000001bb3395ac40 nid=18484 waiting for monitor entry [0x00000099227ff000] java.lang.Thread.State: BLOCKED (on object monitor) at deadlock.DeadlockExample.lambda(deadlock/DeadlockExample.java:23) - waiting to lock <0x000000070d03c740> (a java.lang.Object) - locked <0x000000070d05a828> (a java.lang.Object) at deadlock.DeadlockExample$$Lambda/0x000001bb350019f8.run(deadlock/Unknown Source) at java.lang.Thread.runWith(java.base@21.0.5/Thread.java:1596) at java.lang.Thread.run(java.base@21.0.5/Thread.java:1583) "Thread-1" #30 [23240] prio=5 os_prio=0 cpu=0.00ms elapsed=1896.34s tid=0x000001bb3395b2a0 nid=23240 waiting for monitor entry [0x00000099228ff000] java.lang.Thread.State: BLOCKED (on object monitor) at deadlock.DeadlockExample.lambda(deadlock/DeadlockExample.java:41) - waiting to lock <0x000000070d05a828> (a java.lang.Object) - locked <0x000000070d03c740> (a java.lang.Object) at deadlock.DeadlockExample$$Lambda/0x000001bb35001c08.run(deadlock/Unknown Source) at java.lang.Thread.runWith(java.base@21.0.5/Thread.java:1596) at java.lang.Thread.run(java.base@21.0.5/Thread.java:1583) ... ..... .. Found one Java-level deadlock: ============================= "Thread-0": waiting to lock monitor 0x000001bb117727a0 (object 0x000000070d03c740, a java.lang.Object), which is held by "Thread-1" "Thread-1": waiting to lock monitor 0x000001bb11772500 (object 0x000000070d05a828, a java.lang.Object), which is held by "Thread-0" Java stack information for the threads listed above: =================================================== "Thread-0": at deadlock.DeadlockExample.lambda(deadlock/DeadlockExample.java:23) - waiting to lock <0x000000070d03c740> (a java.lang.Object) - locked <0x000000070d05a828> (a java.lang.Object) at deadlock.DeadlockExample$$Lambda/0x000001bb350019f8.run(deadlock/Unknown Source) at java.lang.Thread.runWith(java.base@21.0.5/Thread.java:1596) at java.lang.Thread.run(java.base@21.0.5/Thread.java:1583) "Thread-1": at deadlock.DeadlockExample.lambda(deadlock/DeadlockExample.java:41) - waiting to lock <0x000000070d05a828> (a java.lang.Object) - locked <0x000000070d03c740> (a java.lang.Object) at deadlock.DeadlockExample$$Lambda/0x000001bb35001c08.run(deadlock/Unknown Source) at java.lang.Thread.runWith(java.base@21.0.5/Thread.java:1596) at java.lang.Thread.run(java.base@21.0.5/Thread.java:1583) Found 1 deadlock.
VisualVM dan jstack ialah dua alatan penting dalam kit alat pembangun Java untuk mendiagnosis dan menyelesaikan masalah aplikasi Java, terutamanya apabila menangani isu prestasi, kebuntuan dan kesesakan benang.
Bersama-sama, VisualVM dan jstack menawarkan pendekatan komprehensif untuk menyahpepijat aplikasi Java, dengan VisualVM menyediakan cerapan prestasi masa nyata yang luas dan jstack membolehkan analisis peringkat benang mendalam. Penggunaan gabungan mereka membolehkan pembangun mendiagnosis dan menyelesaikan isu Java yang kompleks dengan berkesan dalam kedua-dua persekitaran pembangunan dan pengeluaran.
Terima kasih yang tidak terhingga kepada dokumentasi dalam talian, komuniti dan semua sumber yang tersedia yang membolehkan penulisan ini.
Atas ialah kandungan terperinci Nyahpepijat dan Pantau Apl Java dengan VisualVM dan jstack. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!