
JVMM (JVM Monitor)은 Java 가상 머신 및 운영 체제의 서비스 기반 모니터링을 제공하는 도구입니다. OS (메모리, CPU, 디스크 상태 및 IO, 네트워크 카드 상태 및 IO 등), JVM (메모리, 스레드, 스레드 풀, 메모리 풀, GC, 클래스 로더 등)과 같은 데이터 수집 기능이 풍부하고 Flame 다이어그램 생성, Java 코드의 핫 업데이트, 디코티브, 서비스 모니터링, Progrication Investation, Progrication Investing, Program Investing, Program Investing, Program Investing, Progrication Investing, Tureth Monitoring, Decture Investation, Decomplation, Decomplation, Decomplation, Decomplation, Decomplation 등과 같은 기능을 제공합니다. 등.
최신 버전의 JVMM을 다운로드하고 압축을 풀려면 릴리스로 가십시오.
팁 : JVMM의 일부 기능은 지역 환경의 JDK에 따라 다릅니다. 환경에서 JRE 대신 JDK를 설치해야합니다. 간단한 검증 : 환경에서
jps -l실행하십시오. 정상적으로 실행하고 결과를 출력 할 수 있다면 환경이 정상임을 의미합니다. 그렇지 않으면 JVMM이 실행되지 않을 수 있습니다.
먼저 다음 명령을 실행하여 서비스 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.jarJVMM 서버가 성공적으로 시작되면 기본적으로 포트 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 시작 직접 시작합니다 (통합 및 코드 핫 업데이트 기능은 지원하지 않습니다)알아채다! ! !
서버를 시작하는 방법에 관계없이 실행중인 환경이 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 Method에서 필요한 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 객체로 전달 될 수 있습니다. 구성을 구성하여 사용자 정의 구성을 구현할 수 있습니다.
jvmmconnector를 사용하여 JVMM Server ServerConveyDemo.java를 연결하십시오
서버가 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 쓰레기 수집기 정보를 수집하십시오 |
| 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 | 요소가 스레드 ID 인 JSONARRAY | JVM 스레드 세부 사항을 수집합니다 (CPU 시간, 블록 시간, 잠금 등) |
| JVMM_COLLECT_JVM_THREAD_POOL | jsonobject, 그 속성은 다음과 같습니다. classloaderhash (string), clazz (string), 인스턴스 필드 (문자열), 필드 (String) | JVM 스레드 풀 정보를 수집하십시오 |
| JVMM_COLLECT_JVM_THREAD_ORDERED_CPU_TIME | jsonobject, 그 속성은 다음과 같습니다 : type (string, stack | info), durationseconds (int) | 특정 시간 내에 JVM 스레드에서 CPU 사용량 획득 |
| 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 | 코드 핫 업데이트. 클래스 로더의 해시를 지정할 때 클래스 로더로로드 된 클래스를 변경하기위한 핫 업데이트 일뿐입니다. |
| jvmm_execute_switches_get | / | 획득 스위치 정보를 얻으십시오 |
| jvmm_execute_switches_set | JsonObject, 그 속성은 다음과 같습니다. 이름 (switches []), Open (부울) | 획득 스위치를 설정하십시오 |
| jvmm_profiler_sample | ProfilersAmpledto를 참조하십시오 | 불꽃 맵을 생성하십시오 |
| jvmm_profiler_execute | 끈 | 프로파일 러 명령을 실행하고 비동기 프로파일러를 참조하십시오 |
| jvmm_profiler_start | eventcounterinteval 필드 만 유효한 profilersampledto를 참조하십시오 | 프로파일 러 시작 샘플링 명령을 실행하십시오 |
| jvmm_profiler_stop | String, profilersampledto의 형식 필드, 선택적 값은 htmltxtjfr 입니다 | 프로파일 러 샘플링 및 내보내기 파일 명령을 실행하십시오. |
| jvmm_profiler_status | / | 현재 프로파일 러 상태를 얻으십시오 |
| jvmm_profiler_list_events | / | 현재 환경에서 지원하는 프로파일 러 이벤트를 얻으십시오 |
| jvmm_server_shutdown | 끈 | 서비스를 닫으십시오. 데이터는 서비스 유형입니다 |

HTTP 서비스는 다음과 같은 API 인터페이스를 제공합니다.
| 우리 | 방법 | 매개 변수 | 몸 | 설명하다 |
|---|---|---|---|---|
| /수집/프로세스 | 얻다 | / | / | 프로세스 정보를 수집하십시오 |
| /수집/디스크 | 얻다 | / | / | 실제 기계 디스크 데이터를 수집하십시오 |
| /수집/디스크 _io | 얻다 | / | / | 물리적 기계의 디스크 IO 및 처리량 데이터를 수집하십시오 |
| /수집/CPU | 얻다 | / | / | 물리적 기계의 CPU로드 데이터를 수집하십시오 |
| /수집/네트워크 | 얻다 | / | / | 실제 머신 네트워크 카드 정보 및 IO 데이터를 수집하십시오 |
| /수집/시스템 | 얻다 | / | / | 운영 체제 정보를 수집합니다 |
| /수집/SYS/메모리 | 얻다 | / | / | 운영 체제 메모리 데이터를 수집합니다 |
| /수집/SYS/파일 | 얻다 | / | / | 운영 체제 디스크 파티션 사용 데이터를 수집하십시오 |
| /수집/포트 | 얻다 | 포트 (int []) | / | 운영 체제 포트 점령 취득 |
| /수집/JVM/클래스 로딩 | 얻다 | / | / | JVM 클래스 로딩 정보를 수집하십시오 |
| /수집/JVM/클래스 로더 | 얻다 | / | / | JVM 클래스 로더 정보를 수집하십시오 |
| /수집/JVM/컴파일 | 얻다 | / | / | JVM 컴파일 정보를 수집하십시오 |
| /수집/JVM/GC | 얻다 | / | / | JVM 쓰레기 수집기 정보를 수집하십시오 |
| /수집/JVM/Memory_Manager | 얻다 | / | / | JVM 메모리 관리자 정보를 수집하십시오 |
| /수집/jvm/memory_pool | 얻다 | / | / | JVM 메모리 풀 정보를 수집하십시오 |
| /수집/JVM/메모리 | 얻다 | / | / | JVM 메모리 사용을 수집하십시오 |
| /수집/JVM/스레드 | 얻다 | / | / | JVM 스레드 통계를 수집하십시오 |
| /수집/JVM/Thread_Stack | 우편 | / | ThreadinFodto를 참조하십시오 | 지정된 JVM 스레드 스택 데이터를 수집하십시오 |
| /수집/JVM/DUMP_THREAD | 얻다 | / | / | 모든 스레드 스택 데이터를 덤프합니다 |
| /collect/jvm/stread_ordered_cpu_time | 얻다 | 유형 (문자열, 스택 | 정보), 홍수 초 (int) | / | 특정 시간 내에 JVM 스레드에서 CPU 사용량 획득 |
| /collect/jvm/stread_detail | 얻다 | id (long []) | / | JVM 스레드 세부 사항을 수집합니다 (CPU 시간, 블록 시간, 잠금 등) |
| /수집/JVM/Thread_Pool | 얻다 | ClassLoaderHash (String), Clazz (String), 인스턴스 필드 (String), Field (String) | / | JVM 스레드 풀 정보를 수집하십시오 |
| /collect/by_options | 얻다 | 옵션 (CollectionType []) | 옵션을 기반으로 한 배치의 데이터 수집 | |
| /execute/gc | 얻다 | / | / | GC 실행 |
| /execute/jps | 얻다 | / | / | 모든 Java 프로세스를 나열하십시오 |
| /execute/jvm_tool | 우편 | / | 명령 (문자열) | JVM 도구 명령을 실행하십시오 |
| /execute/jad | 얻다 | className (String), MethodName (String) | / | 코드 복합 (에이전트 만 지원됩니다) |
| /execute/load_patch | 우편 | / | JSONARRAY | 코드 핫 업데이트. 클래스 로더의 해시를 지정할 때 클래스 로더로로드 된 클래스를 변경하기위한 핫 업데이트 일뿐입니다. |
| /execute/get_switches | 얻다 | / | / | 획득 스위치 정보를 얻으십시오 |
| /execute/set_switches | 얻다 | 이름 (스위치 []), Open (부울) | / | 획득 스위치를 설정하십시오 |
| /profiler/flame_graph | 우편 | / | ProfilersAmpledto를 참조하십시오 | 불꽃 맵을 생성하십시오 |
| /profiler/start | 우편 | / | eventcounterinteval 필드 만 유효한 profilersampledto를 참조하십시오 | 프로파일 러 시작 샘플링 명령을 실행하십시오 |
| /프로파일 러/스톱 | 우편 | / | String, profilersampledto의 형식 필드, 선택적 값은 htmltxtjfr 입니다 | 프로파일 러 샘플링 및 내보내기 파일 명령을 실행하십시오. |
| /profiler/status | 얻다 | / | / | 현재 프로파일 러 상태를 얻으십시오 |
| /profiler/list_events | 얻다 | / | / | 현재 환경에서 지원하는 프로파일 러 이벤트를 얻으십시오 |
| /profiler/execute | 우편 | / | 명령 (문자열) | 프로파일 러 명령을 실행하고 비동기 프로파일러를 참조하십시오 |
| /서버/종료 | 얻다 | 대상 (문자열) | / | 서비스를 닫으십시오. 데이터는 서비스 유형입니다 |

Sentinel 모드의 작동 논리는 정기적으로 지정된 데이터 항목을 수집 한 다음 가입자에게 푸시하는 것 입니다. 데이터를 수신 할 수있는 가입 서비스 (HTTP 인터페이스)를 제공해야합니다. 인터페이스 액세스에 ID 인증이 필요한 경우 가입자 HTTP 인터페이스는 현재 기본 인증 만 지원합니다.
센티넬 모드 구성
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은 2 개의 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을 원격으로 호출하는 간단하고 빠른 방법을 제공합니다. 물론, 첨부 서버 및 종속성 항아리 생성과 같은 중요한 기능도 수행합니다.
클라이언트 도구는 부트 스트랩 명령 실행 함수를 제공하며 매개 변수를 사용하지 않더라도 문의가 실행됩니다. 구체적인 사용은 다음 명령을 사용하여 도움말 문서를보십시오.
java -jar jvmm.jar -h클라이언트 도구 별 데이터 수집의 예
화염 다이어그램 예제를 생성합니다

코드 호출 예제
사용자 정의 대시 보드 응용 프로그램 예제

프로젝트 내부의 일부 구성 요소는 프로젝트 없이도 가볍고 사용하기 쉬운 프로젝트없이 사용할 수 있습니다.
그 이유는 환경에 JDK 도구가 없거나 환경 변수가 구성되지 않기 때문입니다. JRE 대신 JDK로 환경이 설치되어 있는지 확인하십시오. 간단한 검증 : 환경에서 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 에 주목하십시오)