คำนำ
บทความนี้ส่วนใหญ่แนะนำเครื่องมือการจัดการความผิดของเครื่องเสมือน Java เครื่องมือเหล่านี้ที่กล่าวถึงในบทความรวมถึง:
| ชื่อ | ฟังก์ชั่นหลัก |
| JPS | เครื่องมือสถานะกระบวนการ JVM แสดงกระบวนการเครื่องเสมือนฮอตสปอตทั้งหมดในระบบที่ระบุ โดยปกติโฮสต์ท้องถิ่น |
| jstat | เครื่องมือตรวจสอบสถิติ JVM ใช้ในการรวบรวมข้อมูลการทำงานของทุกด้านของเครื่องเสมือนฮอตสปอต |
| jinfo | ข้อมูลการกำหนดค่าสำหรับ Java แสดงข้อมูลการกำหนดค่าเครื่องเสมือนจริง |
| JMAP | แผนที่หน่วยความจำสำหรับ Java สร้างสแน็ปช็อตหน่วยความจำเสมือนของเครื่องเสมือน (ไฟล์ heapdump) |
| jhat | เบราว์เซอร์ JVM Heap Dump ใช้ในการวิเคราะห์ไฟล์ heapdump มันสร้างเซิร์ฟเวอร์ HTTP/HTML ทำให้ผู้ใช้สามารถดูผลการวิเคราะห์บนเบราว์เซอร์ |
| jstack | Stack Trace สำหรับ Java แสดงสแนปชอตเธรดของเครื่องเสมือน |
JPS: เครื่องมือสถานะกระบวนการเสมือนจริงของเครื่อง
ฟังก์ชั่นของ JPS นั้นคล้ายกับคำสั่ง PS ใน Unix/Liunx มันเป็นเพียงการพิมพ์กระบวนการเสมือนจริงที่รันและแสดงชื่อของคลาสหลักของเครื่องเสมือนและเครื่องเสมือนจริงของเครื่องเสมือนจริงของกระบวนการเหล่านี้ (ตัวระบุเครื่องเสมือนท้องถิ่น LVMID มักจะเป็นรหัสกระบวนการระบบ)
รูปแบบคำสั่ง JPS:
JPS [ตัวเลือก] [HostId]
JPS สามารถสอบถามสถานะกระบวนการของเครื่องเสมือนรีโมตของบริการ RMI ผ่านโปรโตคอล RMI และ HostID เป็นชื่อโฮสต์ที่ลงทะเบียนในรีจิสทรี RMI
JPS ตัวเลือกทั่วไปอื่น ๆ :
-Q เท่านั้นเอาต์พุต LVMID, ละเว้นชื่อของคลาสหลัก;
-m พารามิเตอร์เอาท์พุทที่ส่งผ่านไปยังฟังก์ชันหลัก () ของคลาสหลักเมื่อเริ่มกระบวนการเสมือนจริง
-l เอาต์พุตชื่อเต็มของคลาสหลัก หากกระบวนการดำเนินการแพ็คเกจ JAR ให้ส่งออกเส้นทาง JAR;
-V เอาต์พุตพารามิเตอร์ JVM เมื่อเริ่มกระบวนการเสมือนจริง
ตัวอย่างคำสั่ง JPS:
[root@localhost ~]# jps -l3914 org.zhangyoubao.payservice.app12180 sun.tools.jps.jps6913 org.zhangyoubao.userprofiler.app
JSTAT: เครื่องมือตรวจสอบสถิติเครื่องเสมือนจริง
JSTAT เป็นเครื่องมือที่ใช้ในการตรวจสอบข้อมูลสถานะการทำงานที่หลากหลายของเครื่องเสมือน มันสามารถแสดงพารามิเตอร์การรันเช่นโหลดคลาสหน่วยความจำ GC.JIT ในกระบวนการเครื่องเสมือนจริงหรือระยะไกล
รูปแบบคำสั่ง JSTAT:
jstat [ตัวเลือก vmid [Interval [s | ms] [count]]]]
ช่วงเวลาและการนับเป็นช่วงเวลาการสืบค้นและเวลา หากมีการละเว้นพารามิเตอร์ทั้งสองนี้หมายความว่าเพียงแค่ค้นหาเพียงครั้งเดียว
ตัวเลือกอื่น ๆ ที่ใช้กันทั่วไปสำหรับ JSTAT:
-class ตรวจสอบจำนวนโหลด/unloads ของคลาสและเวลาโหลดพื้นที่ทั้งหมด;
-คอมไพเลอร์วิธีการใช้เวลานานและข้อมูลอื่น ๆ ที่รวบรวมโดยคอมไพเลอร์ JIT;
-PrintCompilation วิธีที่ส่งออกวิธีการที่รวบรวม JIT;
-GC ตรวจสอบสถานะของกอง Java;
-gccapacity เนื้อหาการตรวจสอบนั้นเหมือนกับ -GC แต่เอาต์พุตมุ่งเน้นไปที่พื้นที่สูงสุด/ต่ำสุดของแต่ละพื้นที่ของ Java;
-gcutil เนื้อหาการตรวจสอบนั้นเหมือนกับ -GC แต่เอาต์พุตมุ่งเน้นไปที่การใช้พื้นที่ว่าง 100%;
-gccause เช่นเดียวกับฟังก์ชั่น -gcutil เอาต์พุตเพิ่มเติมทำให้ GC สุดท้าย;
-gcnew ตรวจสอบสถานะของ GC รุ่นใหม่;
-GCNewCapacity ตรวจสอบคนรุ่นใหม่และส่งออกเช่นเดียวกับ -gccapacity;
-gcold ตรวจสอบสถานะ GC ในผู้สูงอายุ
-gcoldcapacity ตรวจสอบผู้สูงอายุและส่งออกเช่นเดียวกับ -gccapacity;
-gcpermcapactiy ตรวจสอบการสร้างถาวร (พื้นที่รหัส), ส่งออกเช่นเดียวกับ -gccapacity;
ตัวอย่างคำสั่ง JSTAT:
[root@localhost ~]# jstat -gc 6913 S0C S1C S0U S1U EC EU OC OC PC PU YGC YGCT FGC FGCT GCT 34048.0 34048.0 0.0 3217.8 272640.0 171092.7 683264.0 168910.7 37857 380.644 69 3.447 384.091
Jinfo: เครื่องมือข้อมูลการกำหนดค่า Java
ฟังก์ชั่นของ JINFO คือการดูและปรับพารามิเตอร์ต่าง ๆ ของเครื่องเสมือนจริงแบบเรียลไทม์
รูปแบบคำสั่ง jinfo:
jinfo [ตัวเลือก] PID
ตัวเลือกอื่น ๆ ที่ใช้กันทั่วไปสำหรับ jinfo:
-lag name = ค่าการแก้ไขค่าพารามิเตอร์
-พารามิเตอร์พารามิเตอร์ชื่อ FLAG
ตัวอย่างคำสั่ง jinfo:
[root@localhost ~]# jinfo 6913ATTACHING เพื่อประมวลผล ID 6913 โปรดรอ ... ดีบั๊กที่แนบมาได้สำเร็จเครื่องรวบรวมคอมไพเลอร์ตรวจพบ JVM เวอร์ชัน 24.91 -B01JAVA -dserver.root =/usr/local/user_profiler -dcom.sun.management.jmxremote.port = 7003 -dcom.sun.management.jmxremote.ssl = false -dcom.sun.management.jmxremote.authentic -xx:+printgcdatestamps -xx:+useconcmarksweepgc
JMAP: เครื่องมือการแมปหน่วยความจำ Java
คำสั่ง JMAP สามารถใช้ในการสร้างสแน็ปช็อตที่เก็บของฮีป (ไฟล์ดั๊ม) นอกจากนี้ยังสามารถตรวจสอบรายละเอียดของการสรุปคิว (คิวแบบประหยัดด้วยตนเอง), Java HEAP และพื้นที่รหัส
รูปแบบคำสั่ง JMAP:
JMAP [ตัวเลือก] VMID
ตัวเลือกอื่น ๆ ที่ใช้กันทั่วไปสำหรับ JMAP:
-Dump สร้างภาพรวมของที่เก็บจาวาฮีป รูปแบบ: -dump: [live,] format = b, file = <filename>;
-FinalizerInfo แสดงวัตถุใน F-queue ที่กำลังรอปรากฏการณ์ finalizer เพื่อดำเนินการวิธีการสรุป;
-HEAP แสดงข้อมูลโดยละเอียดของกอง Java เช่นประเภทของการรีไซเคิลที่ใช้การกำหนดค่าพารามิเตอร์การรอสถานะ Generational
-Histo แสดงสถิติของวัตถุในกองรวมถึงชั้นเรียนหนังสืออินสแตนซ์และความสามารถทั้งหมด
-Permstat ใช้ classloader เป็นพอร์ทัลสถิติเพื่อแสดงข้อมูลหน่วยความจำการสร้างถาวร
-f เมื่อตัวเลือกกระบวนการเสมือนจริงของฮีป-เดอพ์ไม่ตอบสนองคุณสามารถใช้ตัวเลือกนี้เพื่อบังคับให้ถ่ายโอนข้อมูลถ่ายโอนข้อมูล
ตัวอย่างคำสั่ง JMAP:
[root@localhost ~] #jmap -histo 6913 | head -20 num #instances #bytes ชื่อคลาส ------------------------------------------ 1: 1864966 113459432 [C 2: 201846 49201192 org.zhangyoubao.thriftdef.userusefulinfo 5: 47104 11072048 [I 6: 268631 8596192 java.util.hashmap $ รายการ 7: 48812 7451760 com.mysql.jdbc.connectionpropertiesimpl $ booleanconnectionProperty 9: 48812 6257856 <Methenklass> 10: 4230 5271640 <ConstantPoolklass> 11: 159491 5103712 JAVA.UTIL. org.zhangyoubao.common.cache.adv.node 13: 127027 4064864 java.util.concurrent.CurrentHashMap $ HASHENTRY 14: 230433 3686928 JAVA.lang.Integer 15: 3765 30498244444444 com.mysql.jdbc.field 17: 4230 2943840 <incessklassklass>
โดยที่ [C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][]
JHAT: เครื่องมือการวิเคราะห์สแนปช็อตการถ่ายโอนของเครื่องเสมือนจริง
คำสั่ง JHAT ใช้ร่วมกับ JMAP และใช้ในการวิเคราะห์ไฟล์ดัมที่สร้างโดย JMAP JHAT มีเซิร์ฟเวอร์ Mini HTTP/HTML ในตัว หลังจากผลการวิเคราะห์ของไฟล์ถ่ายโอนข้อมูลที่สร้างขึ้นสามารถดูได้ในเบราว์เซอร์
รูปแบบคำสั่ง jhat:
ชื่อไฟล์ JMAP
ตัวอย่างคำสั่ง JHAT:
[root@localhost ~]# jhat html_intercept_server.dump การอ่านจาก html_intercept_server.dump ... ไฟล์ดั๊มพ์ที่สร้างขึ้นเมื่อวันพุธที่ 23 13:05:33 CST 2016 เซิร์ฟเวอร์บนพอร์ต 7000Server พร้อมแล้ว
JSTACK: Java Thread Stack Trace Tool
JStack ใช้เพื่อสร้างสแนปชอตเธรดของเวลาปัจจุบันของเครื่องเสมือน สแน็ปช็อตเธรดเป็นแผนการสแต็กวิธีการที่แต่ละเธรดของเครื่องเสมือนปัจจุบันกำลังดำเนินการ จุดประสงค์หลักของการสร้างสแน็ปช็อตเธรดคือการค้นหาสาเหตุที่เธรดหยุดชั่วคราวเป็นเวลานาน เมื่อเธรดหยุดชั่วคราวให้ใช้ JSTACK เพื่อดูว่าเธรดที่ไม่ตอบสนองทำอะไรในพื้นหลังหรือแหล่งข้อมูลใดที่รออยู่
รูปแบบคำสั่ง jstack:
jstack [ตัวเลือก] vmid
jstack ตัวเลือกอื่น ๆ :
-f เมื่อไม่ได้รับการตอบสนองตามปกติแล้วให้บังคับให้สแต็กเธรดเป็นเอาต์พุต
-l แสดงข้อมูลเพิ่มเติมเกี่ยวกับการล็อคนอกเหนือจากการแสดงสแต็ก
-m หากมีการเรียกวิธีการในท้องถิ่นสแต็กของ C/C ++ สามารถแสดงได้
ตัวอย่างคำสั่ง jstack:
[root@localhost ~]# JSTACK 29577 | Head -202016-11-23 12: 58: 23 Fulll Thread Dump OpenJDK Server VM (24.91-B01 โหมดผสม): "Pool-1-Thread-7261" PRIO = 10 TID = 0x0893a400 Nid = 0x6b0d java.lang.thread.state: timed_waiting (ที่จอดรถ) ที่ sun.misc.unsafe.park (วิธีการดั้งเดิม) - ที่จอดรถเพื่อรอ <0x75b5b400> (java.util.concurrent.synchronousqueue $ transferstack) ที่ java.util.concurrent.locks.locksupport.parknanos (locksupport.java:226) ที่ java.util.concurrent.synchronousqueue $ transferstack.awaitfulfill (synchronousqueue.java:460 java.util.concurrent.synchronousqueue $ transferstack.transfer (synchronousqueue.java:359) ที่ java.util.concurrent.synchronousqueue.poll (synchronousqueue.java:942) ที่ java.util.concurrent.threadpoolexecutor.getTask (threadpoolexecutor.java:1068) ที่ java.util.concurrent.threadpoolexecutor.runworker (Threadpoolexecutor.java:1130) ที่ java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java:615) ที่ java.lang.thread.run (Thread.java:745) java.lang.thread.state: timed_waiting (นอน) ที่ java.lang.thread.sleep (วิธีการดั้งเดิม) ที่ org.zhangyoubao.video.client.runner.simplevideorunner.dowork
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของคุณ หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร