
JVMM (JVM Monitor) เป็นเครื่องมือที่ให้การตรวจสอบตามบริการของเครื่องเสมือน Java และระบบปฏิบัติการ มันมีฟังก์ชั่นการเก็บข้อมูลข้อมูลที่หลากหลาย: OS (หน่วยความจำ, CPU, สถานะดิสก์และ IO, สถานะการ์ดเครือข่ายและ IO, ฯลฯ ), JVM (หน่วยความจำ, เธรดพูลพูล, สระว่ายน้ำหน่วยความจำ, GC, ตัวโหลดคลาส, ฯลฯ )
โปรดไปที่เผยแพร่เพื่อดาวน์โหลด JVMM เวอร์ชันล่าสุดและเปิดซิป
เคล็ดลับ: ฟังก์ชั่นบางอย่างของ JVMM ขึ้นอยู่กับ JDK ในสภาพแวดล้อมท้องถิ่น โปรดตรวจสอบให้แน่ใจว่าคุณติดตั้ง JDK แทนที่จะเป็น JRE ในสภาพแวดล้อมของคุณ การตรวจสอบอย่างง่าย: ดำเนินการ
jps -lในสภาพแวดล้อมของคุณ หากสามารถดำเนินการตามปกติและส่งออกผลลัพธ์ก็หมายความว่าสภาพแวดล้อมนั้นโอเคมิฉะนั้น JVMM อาจไม่สามารถทำงานได้
ขั้นแรกให้ดำเนินการคำสั่งต่อไปนี้เพื่อสร้างแพ็คเกจ Service Jar
java -jar jvmm.jar -m jar -sจากนั้นเริ่มเซิร์ฟเวอร์โปรดใส่ใจกับเวอร์ชัน JDK ของคุณเมื่อเริ่มต้น
# 启动server,jdk 8使用下面命令
java -jar jvmm-server.jar
# jdk 9+ 为确保成功运行建议使用下面命令
java -jar --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.management/sun.management=ALL-UNNAMED
jvmm-server.jarหากเริ่มต้นเซิร์ฟเวอร์ JVMM สำเร็จจะทำงานบนพอร์ต 5010 โดยค่าเริ่มต้นจากนั้นคุณต้องตั้งค่าหน้าต่างใหม่ในไดเรกทอรีปัจจุบันเพื่อดำเนินการ:
java -jar jvmm.jar -m client -a 127.0.0.1:5010 หากการเชื่อมต่อเซิร์ฟเวอร์สำเร็จคุณจะเข้าสู่โหมดไคลเอนต์ คุณสามารถป้อนคำสั่งต่อไปนี้เพื่อรวบรวมข้อมูลกระบวนการ แน่นอนคุณสามารถป้อน help ในการดูการใช้คำแนะนำที่ใช้งานได้ทั้งหมดในโหมดนี้
info -t processนี่คือตัวอย่างของข้อมูลที่รวบรวมในโหมดไคลเอนต์ JVMM ฟังก์ชั่นที่จัดทำโดย JVMM นั้นมีมากกว่านั้น สำหรับฟังก์ชั่นเพิ่มเติมโปรดอ่านเอกสารการใช้งาน JVMM
ฟังก์ชั่นการเก็บข้อมูลหลักของ JVMM อยู่ในโมดูล core และฟังก์ชั่นที่มุ่งเน้นบริการอยู่ในโมดูล server ตามสถานการณ์การใช้งานของคุณคุณสามารถเลือกวิธีการใช้งานสองวิธีต่อไปนี้:
core (ฟังก์ชั่นเพิ่มเติม) ก่อนอื่นคุณต้องเข้าใจว่าเซิร์ฟเวอร์สามารถทำอะไรได้บ้าง? เซิร์ฟเวอร์มีโหมดบริการสามโหมด ก่อนใช้งานคุณต้องเลือกอันไหนเหมาะกับคุณ นี่คือสามโหมดบริการ:
โหมดบริการใด ๆ ที่แยกออกไม่ได้จากไฟล์การกำหนดค่า jvmm.yml server.type ใช้ในการกำหนดค่าโหมดหรือโหมดที่คุณเลือก พวกเขาสามารถ ทำงานได้ในเวลาเดียวกัน การกำหนดค่าเฉพาะของแต่ละโหมดสอดคล้องกับ server.jvmm , server.http และ server.sentinel
server :
type : jvmm,http,sentinel # 支持同时开启多种模式
jvmm :
# ...
http :
# ...
sentinel :
# ...สำหรับการกำหนดค่าเริ่มต้นดู jvmm.yml และสำหรับข้อมูลการกำหนดค่าดูความคิดเห็นในไฟล์การกำหนดค่า
JVMM ให้สี่วิธีในการเริ่มต้นเซิร์ฟเวอร์ของคุณ:
-javaagent พารามิเตอร์)jvmm-server.jar โดยตรง (ฟังก์ชั่น decompilation and code hot hot ไม่รองรับ)สังเกต! - -
ไม่ว่าคุณจะเริ่มต้นเซิร์ฟเวอร์แบบใดหากสภาพแวดล้อมการทำงานของคุณคือ JDK 9+ หรือสูงกว่าขอแนะนำให้เพิ่มพารามิเตอร์ JVM ต่อไปนี้เมื่อเริ่มต้นเพื่อให้แน่ใจว่าการดำเนินการที่ประสบความสำเร็จ
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.management/sun.management=ALL-UNNAMED
เรียกใช้ jvmm.jar และเลือกโหมด แนบ
java -jar jvmm.jar -m attach -c ./jvmm.ymlจากนั้นคุณจะได้รับแจ้งให้เลือกจำนวนกระบวนการเป้าหมาย หลังจากเลือกเซิร์ฟเวอร์จะเริ่มต้นในกระบวนการเป้าหมาย
หากคุณทราบ PID ของกระบวนการเป้าหมายแล้วคุณสามารถระบุได้โดยตรง:
java -jar jvmm.jar -m attach -c ./jvmm.yml -pid 80080
ในวิธี Java Agent คุณต้องสร้างแพ็คเกจ JAR ที่จำเป็นและใช้พารามิเตอร์ -a เพื่อระบุ agent การสร้าง:
# 如果你的宿主程序中包含了 SLF4J 的实现(例如 logback),需要在生成时使用 -e 参数排除掉jvmm自带的 slf4j 实现
java -jar jvmm.jar -m jar -a -e logger
# 如果你的宿主程序中没有 SLF4J 的实现,无需排除 logger
java -jar jvmm.jar -m jar -a หลังจากดำเนินการไฟล์ที่เกี่ยวข้องจะถูกสร้างขึ้นในไดเรกทอรีระดับเดียวกัน: jvmm-agent.jar จากนั้นพารามิเตอร์ -javaagent จะถูกเพิ่มเมื่อเริ่มโปรแกรมเป้าหมาย (สมมติว่าเป็น app.jar) รูปแบบมีดังนี้:
java -javaagent:<jvmm-agent.jar路径>=config=<jvmm.yml路径> -jar your-app.jar
ตัวอย่างเช่น:
java -javaagent:/path/jvmm-agent.jar=config=/path/jvmm.yml -jar app.jarเพื่อให้เข้ากันได้กับฟังก์ชั่นการใช้เซิร์ฟเวอร์ภายนอกรูปแบบ Javaagent ที่สมบูรณ์คือ:
-javaagent:<jvmm-agent.jar路径>=server=<jvmm-server.jar路径>;config=<jvmm.yml路径>
เมื่อโปรแกรมของคุณเริ่มต้น JVMM จะเริ่มเป็นตัวแทน

หากคุณไม่ต้องการที่จะแนบกับโปรแกรมโฮสต์ใด ๆ คุณสามารถเลือกที่จะเริ่มต้นเซิร์ฟเวอร์ JVMM แยกต่างหากเช่นในสถานการณ์ของการตรวจสอบเครื่องทางกายภาพ
ก่อนอื่นคุณต้องสร้างการพึ่งพา JAR ที่เริ่มต้นและใช้พารามิเตอร์ -s เพื่อระบุ server การสร้าง:
java -jar jvmm.jar -s หลังจากการดำเนินการเสร็จสมบูรณ์ jvmm-server.jar จะถูกสร้างขึ้นในไดเรกทอรีเดียวกันจากนั้นเซิร์ฟเวอร์จะเริ่มต้นขึ้น โปรดใส่ใจกับเวอร์ชัน JDK ของคุณเมื่อเริ่มต้น
# 启动server,jdk 8使用下面命令
java -jar jvmm-server.jar
# jdk 9+ 为确保成功运行建议使用下面命令
java -jar --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.management/sun.management=ALL-UNNAMED
jvmm-server.jarหากคุณต้องการใช้เซิร์ฟเวอร์ในโครงการของคุณคุณต้องแนะนำการพึ่งพา Maven ก่อน
< dependencies >
< dependency >
< groupId >io.github.tzfun.jvmm</ groupId >
< artifactId >jvmm-server</ artifactId >
< version >${jvmm-version}</ version >
</ dependency >
<!-- jvmm日志依赖,如果你的项目中有 SLF4J、Log4J2、Log4J中任意一个依赖,可以去掉此依赖 -->
< dependency >
< groupId >io.github.tzfun.jvmm</ groupId >
< artifactId >jvmm-logger</ artifactId >
< version >${jvmm-version}</ version >
</ dependency >
</ dependencies >เริ่มเซิร์ฟเวอร์ด้วยรหัสหนึ่งบรรทัด
import org . beifengtz . jvmm . server . ServerBootstrap ;
public class Jvmm {
public static void main ( String [] args ) {
ServerBootstrap . getInstance (). start ();
}
} แน่นอนวิธีการเริ่มต้นข้างต้นจะใช้การกำหนดค่าเริ่มต้นและโดยทั่วไปต้องมีการกำหนดค่าที่กำหนดเอง วิธี getInstance สามารถส่งผ่านไปยัง org.beifengtz.jvmm.server.entity.conf.Configuration การกำหนดค่าที่กำหนดเองสามารถใช้งานได้โดยการสร้างการกำหนดค่า
เชื่อมต่อ JVMM Server ServerConveDemo.java โดยใช้ jvmmconnector
เมื่อเซิร์ฟเวอร์เริ่มต้นในโหมด jvmm หรือ http คุณสามารถโทรหาอินเทอร์เฟซในตัวจากระยะไกลได้

บริการ JVMM ให้อินเทอร์เฟซ API ต่อไปนี้:
| พิมพ์ | ข้อมูล | คำอธิบาย |
|---|---|---|
| jvmm_collect_sys_info | - | รวบรวมข้อมูลระบบปฏิบัติการ |
| jvmm_collect_sys_memory_info | - | รวบรวมข้อมูลหน่วยความจำระบบปฏิบัติการ |
| jvmm_collect_sys_file_info | - | รวบรวมข้อมูลการใช้พาร์ติชันดิสก์ระบบปฏิบัติการ |
| jvmm_collect_process_info | - | รวบรวมข้อมูลกระบวนการปัจจุบัน |
| jvmm_collect_disk_info | - | รวบรวมข้อมูลดิสก์เครื่องทางกายภาพ |
| JVMM_COLLECT_DISK_IO_INFO | - | รวบรวมดิสก์ IO และข้อมูลปริมาณงานของเครื่องกายภาพ |
| jvmm_collect_cpu_info | - | รวบรวมข้อมูลโหลด CPU ของเครื่องกายภาพ |
| jvmm_collect_network_info | - | รวบรวมข้อมูลการ์ดเครือข่ายเครื่องทางกายภาพและข้อมูล IO |
| jvmm_collect_port_status | JsonArray ซึ่งเป็นองค์ประกอบของพอร์ต | รวบรวมการใช้พอร์ตเครื่องทางกายภาพ |
| jvmm_collect_jvm_classloading_info | - | รวบรวมข้อมูลการโหลดคลาส JVM |
| JVMM_COLLECT_JVM_CLASSLOADER_INFO | - | รวบรวมข้อมูลตัวโหลดคลาส JVM |
| jvmm_collect_jvm_compilation_info | - | รวบรวมข้อมูลการรวบรวม JVM |
| jvmm_collect_jvm_gc_info | - | รวบรวมข้อมูลนักสะสม JVM Garbage |
| JVMM_COLLECT_JVM_MEMORY_MANAGER_INFO | - | รวบรวมข้อมูลตัวจัดการหน่วยความจำ JVM |
| jvmm_collect_jvm_memory_pool_info | - | รวบรวมข้อมูลกลุ่มหน่วยความจำ JVM |
| jvmm_collect_jvm_memory_info | - | รวบรวมการใช้หน่วยความจำ JVM |
| jvmm_collect_jvm_thread_info | - | รวบรวมสถิติเธรด JVM |
| jvmm_collect_jvm_thread_stack | ดู ThreadInfodto | รวบรวมข้อมูลสแต็กเธรด JVM ที่ระบุ |
| jvmm_collect_jvm_thread_detail | JsonArray ซึ่งเป็นองค์ประกอบของเธรด ID | รวบรวมรายละเอียดเธรด JVM (เวลา CPU เวลาบล็อกล็อค ฯลฯ ) |
| jvmm_collect_jvm_thread_pool | jsonObject, คุณสมบัติของมันคือ: classloaderhash (สตริง), clazz (สตริง), อินสแตนซ์ฟิลด์ (สตริง), ฟิลด์ (สตริง) | รวบรวมข้อมูลพูลเธรด JVM |
| jvmm_collect_jvm_thread_ordered_cpu_time | jsonObject คุณสมบัติของมันคือ: ประเภท (สตริง, สแต็ก | ข้อมูล), durationseconds (int) | การได้มาซึ่งการใช้งาน CPU ในเธรด JVM ภายในระยะเวลาหนึ่ง |
| jvmm_collect_jvm_dump_thread | - | ทิ้งข้อมูลสแต็กเธรดทั้งหมด |
| jvmm_collect_batch | CollectionType [] | การรวบรวมข้อมูลในแบทช์ตามตัวเลือก |
| jvmm_execute_gc | - | ดำเนินการ GC |
| jvmm_execute_java_process | - | แสดงรายการกระบวนการ Java ทั้งหมด |
| jvmm_execute_jvm_tool | สาย | เรียกใช้คำสั่งเครื่องมือ JVM |
| jvmm_execute_jad | JsonObject, คุณสมบัติของมันคือ: className (string), methodName (String) | การสลายรหัส (รองรับเฉพาะตัวแทนเท่านั้น) |
| jvmm_execute_load_patch | JsonArray ซึ่งเป็นองค์ประกอบของ Patchdto | การอัปเดตรหัสร้อน เมื่อระบุแฮชของ classloader มันเป็นเพียงการอัปเดตที่ร้อนแรงสำหรับการเปลี่ยนคลาสที่โหลดโดย classloader |
| jvmm_execute_switches_get | - | รับข้อมูลสวิตช์การได้มา |
| jvmm_execute_switches_set | JsonObject คุณสมบัติของมันคือ: ชื่อ (สวิตช์ []), เปิด (บูลีน) | ตั้งค่าสวิตช์ซื้อกิจการ |
| jvmm_profiler_sample | ดู profilersampledto | สร้างแผนที่เปลวไฟ |
| jvmm_profiler_execute | สาย | ดำเนินการคำสั่ง profiler ดู async-profiler |
| jvmm_profiler_start | ดู profilersampledto โดยมีเพียง eventcounterinteval ฟิลด์ที่ถูกต้อง | ดำเนินการคำสั่งการสุ่มตัวอย่าง Profiler Start |
| jvmm_profiler_stop | สตริงฟิลด์ฟอร์แมตใน profilersampledto ค่าเสริมคือ htmltxtjfr | ดำเนินการ Profiler เพื่อสิ้นสุดการสุ่มตัวอย่างและคำสั่งไฟล์ส่งออก |
| jvmm_profiler_status | - | รับสถานะโปรไฟล์ปัจจุบัน |
| jvmm_profiler_list_events | - | รับกิจกรรม Profiler ที่สนับสนุนโดยสภาพแวดล้อมปัจจุบัน |
| jvmm_server_shutdown | สาย | ปิดบริการข้อมูลคือประเภทบริการ |

บริการ HTTP ให้อินเทอร์เฟซ API ต่อไปนี้:
| URI | วิธี | พารามิเตอร์ | ร่างกาย | อธิบาย |
|---|---|---|---|---|
| /รวบรวม/กระบวนการ | รับ | - | - | รวบรวมข้อมูลกระบวนการ |
| /รวบรวม/ดิสก์ | รับ | - | - | รวบรวมข้อมูลดิสก์เครื่องทางกายภาพ |
| /collect/disk_io | รับ | - | - | รวบรวมดิสก์ IO และข้อมูลปริมาณงานของเครื่องกายภาพ |
| /รวบรวม/CPU | รับ | - | - | รวบรวมข้อมูลโหลด CPU ของเครื่องกายภาพ |
| /รวบรวม/เครือข่าย | รับ | - | - | รวบรวมข้อมูลการ์ดเครือข่ายเครื่องทางกายภาพและข้อมูล IO |
| /รวบรวม/sys | รับ | - | - | รวบรวมข้อมูลระบบปฏิบัติการ |
| /รวบรวม/sys/หน่วยความจำ | รับ | - | - | รวบรวมข้อมูลหน่วยความจำระบบปฏิบัติการ |
| /รวบรวม/sys/ไฟล์ | รับ | - | - | รวบรวมข้อมูลการใช้พาร์ติชันดิสก์ระบบปฏิบัติการ |
| /รวบรวม/พอร์ต | รับ | พอร์ต (int []) | - | การเข้าซื้อกิจการพอร์ตระบบปฏิบัติการ |
| /collect/jvm/classloading | รับ | - | - | รวบรวมข้อมูลการโหลดคลาส JVM |
| /collect/jvm/classloader | รับ | - | - | รวบรวมข้อมูลตัวโหลดคลาส JVM |
| /รวบรวม/jvm/การรวบรวม | รับ | - | - | รวบรวมข้อมูลการรวบรวม JVM |
| /รวบรวม/jvm/gc | รับ | - | - | รวบรวมข้อมูลนักสะสม JVM Garbage |
| /collect/jvm/memory_manager | รับ | - | - | รวบรวมข้อมูลตัวจัดการหน่วยความจำ JVM |
| /collect/jvm/memory_pool | รับ | - | - | รวบรวมข้อมูลกลุ่มหน่วยความจำ JVM |
| /collect/jvm/หน่วยความจำ | รับ | - | - | รวบรวมการใช้หน่วยความจำ JVM |
| /รวบรวม/jvm/เธรด | รับ | - | - | รวบรวมสถิติเธรด JVM |
| /collect/jvm/thread_stack | โพสต์ | - | ดู ThreadInfodto | รวบรวมข้อมูลสแต็กเธรด JVM ที่ระบุ |
| /collect/jvm/dump_thread | รับ | - | - | ทิ้งข้อมูลสแต็กเธรดทั้งหมด |
| /collect/jvm/thread_ordered_cpu_time | รับ | พิมพ์ (String, Stack | ข้อมูล), Durationseconds (int) | - | การได้มาซึ่งการใช้งาน CPU ในเธรด JVM ภายในระยะเวลาหนึ่ง |
| /รวบรวม/jvm/thread_detail | รับ | id (ยาว []) | - | รวบรวมรายละเอียดเธรด JVM (เวลา CPU เวลาบล็อกล็อค ฯลฯ ) |
| /collect/jvm/thread_pool | รับ | classloaderhash (สตริง), clazz (string), อินสแตนซ์ฟิลด์ (สตริง), ฟิลด์ (สตริง) | - | รวบรวมข้อมูลพูลเธรด JVM |
| /รวบรวม/by_options | รับ | ตัวเลือก (CollectionType []) | การรวบรวมข้อมูลในแบทช์ตามตัวเลือก | |
| /ดำเนินการ/GC | รับ | - | - | ดำเนินการ GC |
| /ดำเนินการ/jps | รับ | - | - | แสดงรายการกระบวนการ Java ทั้งหมด |
| /ดำเนินการ/jvm_tool | โพสต์ | - | คำสั่ง (สตริง) | เรียกใช้คำสั่งเครื่องมือ JVM |
| /ดำเนินการ/jad | รับ | className (สตริง), methodName (สตริง) | - | การสลายรหัส (รองรับเฉพาะตัวแทนเท่านั้น) |
| /ดำเนินการ/load_patch | โพสต์ | - | JsonArray ซึ่งเป็นองค์ประกอบของ Patchdto | การอัปเดตรหัสร้อน เมื่อระบุแฮชของ classloader มันเป็นเพียงการอัปเดตที่ร้อนแรงสำหรับการเปลี่ยนคลาสที่โหลดโดย classloader |
| /ดำเนินการ/get_switches | รับ | - | - | รับข้อมูลสวิตช์การได้มา |
| /Execute/set_switches | รับ | ชื่อ (สวิตช์ []), เปิด (บูลีน) | - | ตั้งค่าสวิตช์ซื้อกิจการ |
| /profiler/flame_graph | โพสต์ | - | ดู profilersampledto | สร้างแผนที่เปลวไฟ |
| /profiler/start | โพสต์ | - | ดู profilersampledto โดยมีเพียง eventcounterinteval ฟิลด์ที่ถูกต้อง | ดำเนินการคำสั่งการสุ่มตัวอย่าง Profiler Start |
| /Profiler/Stop | โพสต์ | - | สตริงฟิลด์ฟอร์แมตใน profilersampledto ค่าเสริมคือ htmltxtjfr | ดำเนินการ Profiler เพื่อสิ้นสุดการสุ่มตัวอย่างและคำสั่งไฟล์ส่งออก |
| /profiler/status | รับ | - | - | รับสถานะโปรไฟล์ปัจจุบัน |
| /profiler/list_events | รับ | - | - | รับกิจกรรม Profiler ที่สนับสนุนโดยสภาพแวดล้อมปัจจุบัน |
| /profiler/ดำเนินการ | โพสต์ | - | คำสั่ง (สตริง) | ดำเนินการคำสั่ง profiler ดู async-profiler |
| /เซิร์ฟเวอร์/ปิดเครื่อง | รับ | เป้าหมาย (สตริง) | - | ปิดบริการข้อมูลคือประเภทบริการ |

ตรรกะการดำเนินงานของโหมด Sentinel คือ การรวบรวมรายการข้อมูลที่ระบุเป็นประจำจากนั้นส่งไปยังสมาชิก คุณต้องให้บริการสมัครสมาชิก (อินเตอร์เฟส HTTP) ที่สามารถรับข้อมูลได้ หากการเข้าถึงอินเทอร์เฟซต้องการการรับรองความถูกต้องประจำตัวอินเตอร์เฟสสมาชิก HTTP ปัจจุบันรองรับการรับรองความถูกต้อง พื้นฐาน เท่านั้น
การกำหนดค่าโหมด Sentinel
server :
type : sentinel
sentinel :
- subscribers :
# publish jvmm data to custom http server
- type : http
url : http://127.0.0.1:9999/monitor/subscriber
auth :
enable : true
username : 123456
password : 123456
# publish jvmm data to prometheus
- type : prometheus
url : http://127.0.0.1:9090/api/v1/write
auth :
enable : true
username : 123456
password : 123456
interval : 15
tasks :
- process
- disk
- disk_io
- cpu
- port
...รองรับรายการคอลเลกชันต่อไปนี้ทั้งหมด:
[
" process " ,
" disk " ,
" disk_io " ,
" cpu " ,
" network " ,
" sys " ,
" sys_memory " ,
" sys_file " ,
" port " ,
" jvm_classloading " ,
" jvm_classloader " ,
" jvm_compilation " ,
" jvm_gc " ,
" jvm_memory " ,
" jvm_memory_manager " ,
" jvm_memory_pool " ,
" jvm_thread " ,
" jvm_thread_stack " ,
" jvm_thread_detail " ,
" jvmm_thread_pool "
]ปัจจุบันเฉพาะรายการคอลเลกชันต่อไปนี้เท่านั้นที่รองรับ Prometheus
[
" process " ,
" disk_io " ,
" cpu " ,
" network " ,
" sys " ,
" sys_memory " ,
" sys_file " ,
" jvm_classloading " ,
" jvm_compilation " ,
" jvm_gc " ,
" jvm_memory " ,
" jvm_memory_pool " ,
" jvm_thread "
]JVMM จัดเตรียมแดชบอร์ดเทมเพลต Grafana สองตัว ได้แก่ : Node และ JVM
เทมเพลต โหนด เป็นชุดของรายการการตรวจสอบที่เกี่ยวข้องกับระบบซึ่งสามารถช่วยให้คุณมุ่งเน้นไปที่การตรวจสอบข้อมูลของเครื่องทางกายภาพหรือโฮสต์คลาวด์


วิธีการนำเข้า: นำเข้า Dashboard ID 20430 หรือนำเข้า dashboard-node.json
ในการร่วมมือกับเทมเพลตนี้ต้องกำหนดค่างานต่อไปนี้:
[
" process " ,
" disk_io " ,
" cpu " ,
" network " ,
" sys " ,
" sys_memory " ,
" sys_file "
]เทมเพลต JVM เป็นคอลเลกชันของรายการการตรวจสอบที่เกี่ยวข้องกับ JVM ซึ่งสามารถช่วยให้คุณมุ่งเน้นไปที่ข้อมูลการตรวจสอบของกระบวนการมากขึ้น


วิธีการนำเข้า: นำเข้า Dashboard ID 20429 หรือนำเข้า Dashboard-jvm.json
ในการร่วมมือกับเทมเพลตนี้ต้องกำหนดค่างานต่อไปนี้:
[
" process " ,
" jvm_classloading " ,
" jvm_compilation " ,
" jvm_gc " ,
" jvm_memory " ,
" jvm_memory_pool " ,
" jvm_thread "
]หากคุณต้องการพัฒนาทุติยภูมิตาม JVMM คุณจะต้องแนะนำการพึ่งพาหลัก
< dependency >
< groupId >io.github.tzfun.jvmm</ groupId >
< artifactId >jvmm-core</ artifactId >
< version >${jvmm-version}</ version >
</ dependency > อินเทอร์เฟซฟังก์ชั่นการเก็บข้อมูลทั้งหมดที่จัดทำโดยเซิร์ฟเวอร์ก่อนหน้าและอินเทอร์เฟซการทำงานอื่น ๆ ที่ไม่ได้ให้อินเตอร์เฟสการโทรระยะไกลสามารถรับได้ผ่านคลาสโรงงาน: org.beifengtz.jvmm.core.JvmmFactory
public class Jvmm {
public static void main ( String [] args ) {
// 提供所有的数据采集接口
JvmmCollector collector = JvmmFactory . getCollector ();
// 提供所有的执行接口
JvmmExecutor executor = JvmmFactory . getExecutor ();
// 提供火焰图生成器
JvmmProfiler profiler = JvmmFactory . getProfiler ();
}
}เครื่องมือไคลเอนต์ JVMM ให้วิธีที่ง่ายและรวดเร็วในการโทรจากระยะไกล JVMM แน่นอนว่ามันยังทำหน้าที่สำคัญเช่นเซิร์ฟเวอร์แนบและสร้างขวดพึ่งพา
เครื่องมือไคลเอนต์ให้ฟังก์ชั่นการดำเนินการคำสั่ง bootstrap และจะดำเนินการสอบถามรายละเอียดเพิ่มเติมแม้ว่าคุณจะไม่ใช้พารามิเตอร์ใด ๆ ก็ตาม สำหรับการใช้งานเฉพาะโปรดใช้คำสั่งต่อไปนี้เพื่อดูเอกสารช่วยเหลือ:
java -jar jvmm.jar -hตัวอย่างการเก็บข้อมูลโดยเครื่องมือไคลเอนต์
สร้างตัวอย่างไดอะแกรมเปลวไฟ

ตัวอย่างการโทรรหัส
ตัวอย่างแอปพลิเคชันแดชบอร์ดที่กำหนดเอง

ส่วนประกอบบางอย่างภายในโครงการสามารถใช้งานได้โดยไม่ต้องใช้โครงการน้ำหนักเบาและใช้งานง่าย
เหตุผลก็คือสภาพแวดล้อมของคุณไม่มีเครื่องมือ JDK หรือตัวแปรสภาพแวดล้อมไม่ได้รับการกำหนดค่า โปรดตรวจสอบให้แน่ใจว่าสภาพแวดล้อมของคุณติดตั้งด้วย JDK แทน Just JRE การตรวจสอบอย่างง่าย: ดำเนินการ jps -l ในสภาพแวดล้อมของคุณและหากสามารถดำเนินการตามปกติและส่งออกผลลัพธ์ก็หมายความว่าสภาพแวดล้อมก็โอเค
วิธีแก้ปัญหา: กำหนดค่าไดเรกทอรี JDK bin ในพื้นที่ของคุณเป็นตัวแปรสภาพแวดล้อม
หากคุณเริ่ม JVMM-server.jar เหตุผลก็คือคุณใช้ JDK 9 ขึ้นไป Java ห้ามการเข้าถึงแบบไตร่ตรองบางคลาสที่เริ่มต้นด้วย JDK 9+
java.lang.reflect.InaccessibleObjectException: Unable to make field final jdk.internal.loader.URLClassPath jdk.internal.loader.ClassLoaders$AppClassLoader.ucp accessible: module java.base does not "opens jdk.internal.loader" to unnamed module @2d127a61
วิธีแก้ปัญหา: เพิ่มพารามิเตอร์เครื่องเสมือนต่อไปนี้
# JDK 9+ 为确保成功运行建议设置以下几个虚拟机参数
# --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
# --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
# --add-opens java.base/java.net=ALL-UNNAMED
# --add-opens java.management/sun.management=ALL-UNNAMED
java -jar --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.management/sun.management=ALL-UNNAMED
jvmm-server.jar ./jvmm.yml หากคุณ No access to perf events. Try --fdtransfer or --all-user option or 'sysctl kernel.perf_event_paranoid=1' เหตุผลก็คือเคอร์เนลระบบห้ามตรวจจับประสิทธิภาพของระบบโดยค่าเริ่มต้นและคุณต้องเปิดใช้งานตัวเลือกนี้
sudo systcl -w kernel.perf_event_paranoid=1หรือแก้ไขไฟล์ sysctl
sudo sh -c ' echo "kernel.perf_event_paranoid=1" >> /etc/sysctl.conf '
sudo sysctl -pเครื่องมือนี้เป็นโอเพ่นซอร์สอย่างสมบูรณ์และฟรีและไม่ใช่เรื่องง่ายที่จะสร้าง หากคุณคิดว่ามันดีคุณสามารถบริจาคเพื่อสนับสนุนโครงการนี้
รายการบริจาค:
หากคุณพบปัญหาใด ๆ ในระหว่างการใช้งานหรือมีข้อมูลเชิงลึกหรือข้อเสนอแนะที่เป็นเอกลักษณ์เกี่ยวกับโครงการนี้โปรดส่งปัญหาหรือส่งข้อความส่วนตัวถึงฉัน
อีเมล: [email protected]
WeChat: Beifeng-TZ (โปรดทราบ JVMM หากคุณเพิ่ม)