GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara melacak program java?

Seperti yang disebutkan ckhan, jstack sangat bagus karena memberikan jejak tumpukan penuh dari semua utas aktif di JVM. Hal yang sama dapat diperoleh di stderr JVM menggunakan SIGQUIT.

Alat lain yang berguna adalah jmap yang dapat mengambil heap dump dari proses JVM menggunakan PID proses:

jmap -dump:file=/tmp/heap.hprof $PID

Heap dump ini dapat dimuat di alat seperti visualvm (yang sekarang menjadi bagian dari instalasi Oracle java sdk standar, bernama jvisualvm). Selain itu, VisualVM dapat terhubung ke JVM yang sedang berjalan dan menampilkan informasi tentang JVM, termasuk menampilkan grafik penggunaan CPU internal, jumlah thread, dan penggunaan heap - bagus untuk melacak kebocoran.

Alat lain, jstat , dapat mengumpulkan statistik pengumpulan sampah untuk JVM selama jangka waktu tertentu seperti vmstat ketika dijalankan dengan argumen numerik (mis. vmstat 3 ).

Terakhir, Java Agent dapat digunakan untuk mendorong instrumentasi pada semua metode dari semua objek pada waktu muat. Pustaka javassist dapat membantu untuk membuat ini sangat mudah dilakukan. Jadi, layak untuk menambahkan tracing Anda sendiri. Bagian tersulitnya adalah menemukan cara untuk mendapatkan keluaran pelacakan hanya saat Anda menginginkannya dan tidak setiap saat, yang kemungkinan akan memperlambat JVM menjadi perayapan. Ada sebuah program bernama dtrace yang bekerja dengan cara seperti ini. Saya sudah mencobanya, tetapi tidak terlalu berhasil. Perhatikan bahwa agen tidak dapat menginstrumentasi semua kelas karena yang diperlukan untuk mem-bootstrap JVM dimuat sebelum agen dapat menginstrumentasi, dan sudah terlambat untuk menambahkan instrumentasi ke kelas tersebut.

Saran Saya - mulai dengan VisualVM dan lihat apakah hal itu memberi tahu Anda apa yang perlu Anda ketahui karena dapat menampilkan utas saat ini dan statistik penting untuk JVM.


Sama sia-sia ketika men-debug program yang salah pada sistem Linux, Anda dapat menggunakan alat serupa untuk men-debug JVM yang berjalan di sistem Anda.

Alat #1 - jvmtop

Mirip dengan top , Anda dapat menggunakan jvmtop untuk melihat kelas apa yang sedang berjalan di dalam JVM yang sedang berjalan di sistem Anda. Setelah diinstal, Anda menjalankannya seperti ini:

$ jvmtop.sh

Outputnya memiliki gaya serupa agar terlihat seperti alat top :

 JvmTop 0.8.0 alpha   amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46

Alat #2 - jvmmonitor

Alternatif lain adalah menggunakan jvmmonitor. JVM Monitor adalah profiler Java yang terintegrasi dengan Eclipse untuk memantau penggunaan CPU, thread, dan memori aplikasi Java. Anda dapat menggunakannya untuk secara otomatis menemukan JVM yang sedang berjalan di localhost atau dapat terhubung ke JVM jarak jauh menggunakan [email protected]

Alat #3 - visualvm

visualvm mungkin adalah "alat" yang harus dijangkau saat men-debug masalah dengan JVM. Kumpulan fiturnya cukup dalam dan Anda bisa melihat jeroan secara mendalam.

Membuat profil kinerja aplikasi atau menganalisis alokasi memori:

Ambil dan tampilkan thread dump:

Referensi

  • tutorial visualvm

Pertimbangkan jstack .Tidak cocok untuk strace , lebih dari pstack -analog, tetapi setidaknya akan memberi Anda gambaran tentang snapshot tepat waktu. Bisa merangkai mereka bersama untuk mendapatkan jejak kasar jika Anda harus.

Lihat juga saran di artikel SO ini:https://stackoverflow.com/questions/1025681/call-trace-in-java


Linux
  1. cara memeriksa ukuran tumpukan yang dialokasikan untuk jvm oleh linux

  2. Bagaimana cara mengetahui jalur JVM di sistem Linux?

  3. Bagaimana cara melacak tindakan yang dilakukan oleh virus?

  1. Bagaimana kita bisa melacak masalah program yang mogok di Linux?

  2. Bagaimana cara melacak aktivitas jaringan dari suatu perintah?

  3. Cara Mengaktifkan Target TRACE IPtables di Debian Squeeze (6)

  1. Cara kerja Hexdump

  2. Cara membuka blokir IP di CSF

  3. Cara Meningkatkan Ubuntu 20.04 ke Ubuntu 21.04