Kata pengantar
Artikel ini terutama memperkenalkan alat penanganan kesalahan mesin virtual Java. Alat -alat ini yang disebutkan dalam artikel ini meliputi:
| nama | Fungsi utama |
| JPS | Alat status proses JVM, menampilkan semua proses mesin virtual hotspot dalam sistem yang ditentukan. Biasanya tuan rumah lokal |
| jstat | Alat pemantauan statistik JVM, digunakan untuk mengumpulkan data operasi dari semua aspek mesin virtual hotspot |
| jinfo | Info Konfigurasi untuk Java, Tampilkan Informasi Konfigurasi Mesin Virtual |
| jmap | Peta memori untuk Java, menghasilkan snapshot penyimpanan memori mesin virtual (file heapdump) |
| jhat | JVM Heap Dump Browser, digunakan untuk menganalisis file HeapDump. Ini menetapkan server HTTP/HTML, yang memungkinkan pengguna untuk melihat hasil analisis di browser. |
| JStack | Stack Trace untuk Java, menampilkan snapshot utas dari mesin virtual |
JPS: Alat Status Proses Mesin Virtual
Fungsi JPS mirip dengan perintah PS di Unix/Liunx. Hanya saja ia mencetak proses mesin virtual yang sedang berjalan dan menampilkan nama kelas utama eksekusi mesin virtual dan ID unik mesin virtual lokal dari proses ini (pengidentifikasi mesin virtual lokal, LVMID, biasanya ID proses sistem).
Format Perintah JPS:
JPS [Opsi] [hostid]
JPS dapat menanyakan status proses mesin virtual jarak jauh dari layanan RMI melalui protokol RMI, dan hostid adalah nama host yang terdaftar dalam registri RMI.
JP Opsi Umum Lainnya:
-q Hanya output lvmid, menghilangkan nama kelas utama;
-M Parameter output diteruskan ke fungsi utama () dari kelas utama ketika proses mesin virtual dimulai;
-l output Nama lengkap kelas utama. Jika proses mengeksekusi paket JAR, output jalur JAR;
-V output parameter JVM Ketika proses mesin virtual dimulai.
Sampel Perintah JPS:
[root@localhost ~]# jps -l3914 org.zhangyoubao.payservice.app12180 sun.tools.jps.jps6913 org.zhangyoubao.userprofiler.app
JSTAT: Alat Pemantauan Statistik Mesin Virtual
JSTAT adalah alat yang digunakan untuk memantau berbagai informasi status operasi dari mesin virtual. Ini dapat menampilkan parameter yang berjalan seperti beban kelas, memori GC.jit dalam proses mesin virtual lokal atau jarak jauh.
format perintah jstat:
jStat [opsi vmid [interval [s | ms] [hitung]]]
interval dan jumlah mewakili interval dan waktu kueri. Jika kedua parameter ini dihilangkan, itu berarti hanya kueri sekali.
Opsi lain yang umum digunakan untuk JSTAT:
-Monitor Kelas Jumlah beban/bongkar kelas dan total waktu pemuatan ruang;
-Kompiler Output Metode, memakan waktu dan informasi lain yang disusun oleh kompiler JIT;
-PrintCompilation Metode yang mengeluarkan metode yang dikompilasi JIT;
-GC memantau status tumpukan java;
-gccapacity Konten pemantauan pada dasarnya sama dengan -gc, tetapi output berfokus pada ruang maksimum/minimum dari setiap area Java;
-gcutil Konten pemantauan pada dasarnya sama dengan -gc, tetapi output berfokus pada penggunaan ruang menempati 100%;
-gcCause seperti fungsi -gcutil, output tambahan menyebabkan GC terakhir;
-GCNEW memantau status generasi baru GCS;
-GCNewCapacity memantau generasi baru dan menghasilkan sama dengan -gccapacity;
-gcold memantau status GC pada lansia;
-gcoldCapacity memonitor lansia dan menghasilkan sama dengan -gccapacity;
-gcpermcapactiy memonitor generasi permanen (area kode), menghasilkan sama dengan -gccapacity;
Sampel Perintah JSTAT:
[root@localhost ~]# jStat -gc 6913 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 34048.0 34048.0 3217.8 272640.0 171092.7 683264.0 1689.8 27640.0 171092.7 683264.0 1687. 380.644 69 3.447 384.091
JINFO: Alat Informasi Konfigurasi Java
Fungsi JINFO adalah untuk melihat dan menyesuaikan berbagai parameter mesin virtual secara real time.
Format Perintah Jinfo:
jinfo [opsi] pid
Opsi lain yang umum digunakan untuk Jinfo:
-Flag Name = Nilai Modifikasi Parameter
Parameter parameter -flag nama parameter
Contoh perintah jinfo:
[root@localhost ~]# jinfo 6913 atteTaching untuk memproses ID 6913, harap tunggu ... debugger berhasil dilampirkan. Kompiler server terdeteksi. -Server.root =/usr/local/user_profiler -dcom.sun.management.jmxremote.port = 7003 -dcom.sun.management.jmxremote.ssl = false -dcom.sun.management.jmxremote.Authenticate = false -verbosa: gc -sun. -Xx:+printgcdatestamps -xx:+useconcmarksweepgc
JMAP: Alat Pemetaan Memori Java
Perintah JMAP dapat digunakan untuk menghasilkan snapshot penyimpanan heap (file dump). Ini juga dapat memeriksa detail finalisasi antrian (antrian sandaran), java heap dan area kode.
Format Perintah JMAP:
JMAP [Opsi] VMID
Opsi lain yang umum digunakan untuk JMAP:
-Dump menghasilkan snapshot dari Java Heap Storage. Format: -dump: [live,] format = b, file = <filename>;
-FinalizerInfo menampilkan objek di F-Queue yang sedang menunggu fenomena finak finomena untuk mengeksekusi metode finalisasi;
-Heap menampilkan informasi terperinci dari tumpukan java, seperti jenis pendaur ulang yang digunakan, konfigurasi parameter, status generasi menunggu;
-Histo menampilkan statistik objek di tumpukan, termasuk kelas, buku contoh, dan kapasitas total;
-PERMSTAT Gunakan classloader sebagai portal statistik untuk menampilkan informasi memori generasi permanen;
-F Ketika opsi heap-dump proses mesin virtual tidak merespons, Anda dapat menggunakan opsi ini untuk memaksa snapshot dump.
Sampel Perintah JMAP:
[root@localhost ~] #jmap -histo 6913 | head -20 num #instances #bytes Nama kelas ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 15037056 org.zhangyoubao.thriftdef.userusefulinfo 5: 47104 11072048 [i 6: 268631 8596192 java.util.hashmap $ 7: 48812 7451760 <Constmeethodklass> 88883 7451760 <Constmeethodklass> 88883 7451760 <Constmeethodkrass> 84883 7451760 <Constmeethodks> com.mysql.jdbc.connectionPropertiesImpl $ booleanconnectionProperty 9: 48812 6257856 <MethodKlass> 10: 4230 5271640 <Constantpoolklass> 11: 159491 5103712 java.util.hasht> 11026 org.zhangyoubao.common.cache.adv.node 13: 127027 4064864 java.util.concurrent.currenthashmap $ hashentry 14: 230433 3686928 Java.lang.integer 15: 3765 3049828: Java. com.mysql.jdbc.field 17: 4230 2943840 <SstanceKlassklass>
di mana [C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][] .
Jhat: alat analisis snapshot mesin virtual heap snapshot
Perintah Jhat digunakan bersama dengan JMAP dan digunakan untuk menganalisis file dump yang dihasilkan oleh JMAP. Jhat memiliki server http/html mini bawaan. Setelah hasil analisis file dump yang dihasilkan dapat dilihat di browser.
format perintah jhat:
nama file jmap
sampel perintah jhat:
[root@localhost ~]# jhat html_intercept_server.dump Membaca dari html_intercept_server.dump ... file dump dibuat pada 23 Nov 13:05:33 CST 2016SNAPShot Baca, menyelesaikan ... menyelesaikan Objek 20368 ... Menggunakan Referensi, Mengharapkan 40 Dots ............... terselesaikan. Mulailah server HTTP di port 7000Server sudah siap.
JSTACK: Java Thread Stack Trace Tool
JStack digunakan untuk menghasilkan snapshot utas dari waktu saat ini dari mesin virtual. Snapshots Thread adalah rencana tumpukan metode yang dijalankan oleh setiap utas mesin virtual saat ini. Tujuan utama menghasilkan snapshot utas adalah untuk menemukan alasan mengapa utas itu dijeda untuk waktu yang lama. Saat utas berhenti, gunakan JStack untuk melihat apa yang dilakukan utas yang tidak responsif di latar belakang atau sumber daya apa yang menunggu.
Format perintah jstack:
jStack [opsi] vmid
JStack Opsi Lainnya:
-F Ketika permintaan output yang biasanya tidak ditanggapi, paksa tumpukan utas menjadi output;
-l menampilkan informasi tambahan tentang kunci selain menampilkan tumpukan;
-M Jika metode lokal dipanggil, tumpukan C/C ++ dapat ditampilkan.
Sampel Perintah JStack:
[root@localhost ~]# jStack 29577 | head -202016-11-23 12: 58: 23full Thread dump OpenJDK Server VM (Mode Campuran 24.91-B01): "Pool-1-Thread-7261" PRIO = 10 TID = 0x0893A400 NID = 0x6B0 "PRIO = 0X089393A400 NID = 0x6B0" PRIO = 0X0893A400 NID = 0x6b0 java.lang.thread.state: timed_waiting (parkir) di sun.misc.unsafe.park (metode asli) - parkir untuk menunggu <0x75b5b400> (a java.util.concurrent.synchronousqueue $ transferstack) di java.util.concurrent.locks.locksupport.parknanos (locksupport.java:226) di java.util.concurrent.synchronousqueue $ transferStack.Awaitfulfill (synchronousqueue.java:460) di java.util.concurrent.synchronousqueue $ transferStack.transfer (synchronousqueue.java:359) di java.util.concurrent.synchronousqueue.poll (synchronousqueue.java:942) di java.util.concurrent.threadpoolexecutor.gettask (threadpoolexecutor.java:1068) di java.util.concurrent.threadpoolexecutor.runworker (threadpoolexecutor.java:1130) di java.util.concurrent.threadpoolExecutor $ worker.run (threadpoolexecutor.java:615) di java.lang.thread.run (thread.java:745) "service_hot_lscs-0" Daemon prio = 10 TID = 0x6982dc00 NIDC00 "NIVET6" Daemon = 10 TID = 0x6982dc00 NIDC00 "NID6" NIDONT6 "TIMOR6 NIVE = 10 TIM = 0x6982 java.lang.thread.state: timed_waiting (tidur) di java.lang.thread.sleep (metode asli) di org.zhangyoubao.video.client.runner.simplevideorunner.dowork (Simplevideorunner.java:150)
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini akan membantu studi atau pekerjaan Anda. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.