San*_*ero 5 java ssl jmx remote-debugging java-7
我已经配置了我的 Linux 远程计算机(使用 JRE 1.7)来执行具有 jmx 必要属性的 java 应用程序:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=5005 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar myapplication.jar
Run Code Online (Sandbox Code Playgroud)
现在,在我的 Windows 本地计算机(其中有 JDK 1.7)中,我想使用 jmap 工具,例如打印直方图:
jmap -histo 10.218.72.227:5005
但它因以下错误而失败:
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
Attaching to remote server 10.218.72.227:5005, please wait...
Error attaching to remote server: java.rmi.NotBoundException: Not bound: "SARemoteDebugger" (only bound name is "jmxrmi")
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以使用 jconsole 成功连接,但首先它会提示我一条消息,要求我不安全地重试连接(没有 SSL):

因此,它似乎应该是 jmap 的某种标志才能工作,您知道如何克服这个问题吗?
按照jsadebugd - Serviceability Agent Debug Daemon的手册页,
您首先需要将其附加到您的进程才能jmap远程使用。
以下步骤展示了它是如何工作的。
所有 java 进程(本地和远程)使用的 Java 版本。
java 版本“1.7.0_80”
Java(TM) SE 运行时环境(版本 1.7.0_80-b15)
Java HotSpot(TM) 服务器 VM(版本 24.80-b11,混合模式)
在远程主机上执行
java -jar myapplication.jarrmiregistryrmiregistry -J-Xbootclasspath/p:$JAVA_HOME/lib/sajdi.jar &jps使用(例如12345)获取应用程序的PIDjsadebugd 12345 42在本地主机上执行
jmapjmap -heap 42@10.218.72.227本地主机上的输出
Attaching to remote server 42@10.218.72.227, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.80-b11
Iterating over heap. This may take a while...
Object Histogram:
num #instances #bytes Class description
--------------------------------------------------------------------------
1: 5575 527488 * ConstMethodKlass
2: 5575 493168 * MethodKlass
...
Run Code Online (Sandbox Code Playgroud)
附加说明:手册页指出This utility is unsupported and may or may not be available in future versions of the JDK。
也许在远程计算机上运行 jmap(例如通过 ssh)将是更好的方法。
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |