jwa*_*jwa 5 java jvm jvm-hotspot
我使用以下JVM参数来启动主机调试程序的JVM.
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=0
Run Code Online (Sandbox Code Playgroud)
请注意,我正在分配端口零,以便JVM向操作系统请求临时端口.这对我的用例至关重要,以确保JVM不会因为某些预定义端口的争用而无法启动.
结果我的JVM启动,并将以下日志条目输出到stdout:
Listening for transport dt_socket at address: XXXX
Run Code Online (Sandbox Code Playgroud)
我想找到一些方法来识别JVM内部或外部的调试端口,因此我可以将它记录在状态管理服务器中.
这个用例有哪些选择?我已经考虑了以下几点,但没什么乐趣:
从VM内部:
Properties props = sun.misc.VMSupport.getAgentProperties();
System.out.println(props.getProperty("sun.jdwp.listenerAddress"));
Run Code Online (Sandbox Code Playgroud)
从外部申请:
VirtualMachine vm = com.sun.tools.attach.VirtualMachine.attach(PID);
try {
Properties props = vm.getAgentProperties();
System.out.println(props.getProperty("sun.jdwp.listenerAddress"));
} finally {
vm.detach();
}
Run Code Online (Sandbox Code Playgroud)
两者都不是标准的一部分.仅适用于OpenJDK/Oracle JDK.
| 归档时间: |
|
| 查看次数: |
1897 次 |
| 最近记录: |