java-jvm-tool
Jstatd 遠端連線(推薦)
不用重啟專案
遠端機配置
[demo@localhost jvmtest]$ vi jstatd.all.policy
# 內容
grant codebase "file:/home/demo/jdk1.8.0_171/lib/tools.jar" {
permission java.security.AllPermission;
};
#IP為遠端機外網IP(必須配置ip地址)
[demo@localhost jvmtest]$ nohup jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=172.16.29.61 -p 1099 -J-Djava.rmi.server.logCalls=true &
[1] 203089
[demo@localhost jvmtest]$ nohup: 忽略輸入並把輸出追加到"nohup.out"
[demo@localhost jvmtest]$
[demo@localhost jvmtest]$ tail -f nohup.out
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:884)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.System.setProperty(System.java:792)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)
十二月 19, 2023 2:28:49 下午 sun.rmi.server.UnicastServerRef logCall
較詳細: RMI TCP Connection(1)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: void rebind(java.lang.String, java.rmi.Remote)]
十二月 19, 2023 2:28:50 下午 sun.rmi.server.UnicastServerRef logCall
較詳細: RMI TCP Connection(2)-172.16.29.61: [172.16.29.61: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]
# 記得防火牆開埠或者直接關閉防火牆
[root@localhost ~]# firewall-cmd --zone=public --add-port=1099/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
客戶端連線
在配置好環境變數的前提下,直接在cmd
下執行 jvisualvm
命令。
選中新增的遠端機,右擊,點選【新增 jstatd 連線】,可以設定埠以及重新整理時間。
jstatd埠配置 配置詳情 最終結果JMX 連線
服務端啟動配置
-Dcom.sun.management.jmxremote.port=8999 \
-Dcom.sun.management.jmxremote.rmi.port=8999 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=172.16.29.61 \
客戶端連線
jvisualvm
首先,右擊【遠端】,點選【新增遠端主機】
然後,右擊新增的主機,點選【新增 JMX 連線】,輸入對應埠號。
新增JMX連線jconsole
在配置好環境變數的前提下,直接在cmd
下執行 jconsole
命令。
補充
linux shell 引數換行(標準說法:續行)
\Enter,反斜槓後面緊跟回車,表示下一行是當前行的續行。(For Windows, use the carat (^
) instead of the backslash (\
) to break up a long command into multiple lines)
nohup java -jar -XX:MetaspaceSize=1024m \
-XX:MaxMetaspaceSize=2048m \
-Dcom.sun.management.jmxremote.port=8999 \
-Dcom.sun.management.jmxremote.rmi.port=8999 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=172.16.29.61 \
-Dlog4j2.formatMsgNoLookups=true \
${APP_NAME} --server.port=8082 >> logs/8082.log 2>&1 &
問題
java.security.AccessControlException: access denied
可將檔案 jstatd.all.policy 檔案中的${JAVA_HOME}寫成絕對路徑即可。
參考
Monitoring and Management Using JMX Technology
Monitoring and Management Guide
Enabling remote JMX with password authentication only (apache.org)