Rumah  >  Artikel  >  Java  >  Nyahpepijat dan Pantau Apl Java dengan VisualVM dan jstack

Nyahpepijat dan Pantau Apl Java dengan VisualVM dan jstack

DDD
DDDasal
2024-11-07 08:37:02114semak imbas

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.

1. Memahami Kebuntuan dan Lambakan Benang

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.

2. Pengenalan kepada VisualVM

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.

Ciri-ciri Utama

  • Pemantauan dan pemprofilan secara langsung
  • Analisis benang
  • Memori dan cerapan penggunaan CPU
  • Lambakan benang untuk analisis kebuntuan

Nyahpepijat menggunakan VisualVM (untuk aplikasi Java)

  • Muat turun VisualVM
  • Buka VisualVM.
  • Sambung ke proses JVM yang sedang berjalan.
    Debug and Monitor Java App with VisualVM and jstack

  • Dalam alat pemantauan, anda boleh mengklik pembuangan benang atau melihat butiran benang dalam masa nyata.

Debug and Monitor Java App with VisualVM and jstack

Debug and Monitor Java App with VisualVM and jstack

3. Pengenalan kepada jstack

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.

Ciri-ciri Utama

  • jstack menunjukkan keadaan setiap urutan, seperti BOLEH LALU, DISEKAT, MENUNGGU atau MENUNGGU_MASA.
  • Tangkap surih tindanan untuk proses langsung atau digantung untuk membantu dalam menyahpepijat isu benang yang kompleks.
  • jstack menandakan benang buntu dalam pembuangan benang, membolehkan anda mengenal pastinya dengan cepat.
  • Dapatkan pembuangan benang, yang menyenaraikan semua urutan aktif dalam JVM.
  • Dipasangkan dengan alatan lain seperti VisualVM atau jmap, jstack boleh membantu mengesan kebocoran ingatan kembali ke urutan yang bertanggungjawab untuk penciptaan objek yang berlebihan atau memegang rujukan.
  • Dengan menganalisis pembuangan benang, pembangun boleh mengenal pasti penyegerakan yang bermasalah, penyekatan yang berlebihan atau peluang untuk mengurangkan perbalahan, yang membawa kepada peningkatan serentak dan responsif.

Menggunakan jstack untuk Mendapatkan dan Menganalisis Lambakan Benang

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:

  • Langkah 1: Cari ID Proses (PID) Aplikasi Java
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
  • Langkah 2: Gunakan jstack untuk Menangkap Thread Dump
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.

Nota

  • jstack tersedia dalam JDK, jadi pastikan JDK dipasang dan boleh diakses dalam persekitaran anda.
  • Menggunakan jstack pada sesetengah sistem mungkin memerlukan keistimewaan pentadbir.
  • Menggunakan jstack -l 12345 > threaddump.txt menyimpan pembuangan benang ke fail yang dipanggil threaddump.txt.

Outro

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.

Rujukan

Terima kasih yang tidak terhingga kepada dokumentasi dalam talian, komuniti dan semua sumber yang tersedia yang membolehkan penulisan ini.

  1. Cara menggunakan VisualVM
  2. Konsep Berbilang Benang Bahagian 1: Atomiti dan Ketidakbolehubah
  3. Java VisualVM

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn