1. 問(wèn)題來(lái)源
jps
可以打印出所有的 JVM 進(jìn)程酪耕,也可以通過(guò)jps hostid
訪(fǎng)問(wèn)遠(yuǎn)程節(jié)點(diǎn)上的 JVM進(jìn)程皮钠,但需要遠(yuǎn)程節(jié)點(diǎn)注冊(cè)相關(guān)的服務(wù)飒焦,并且開(kāi)放相關(guān)端口才允許其他節(jié)點(diǎn)訪(fǎng)問(wèn)
2. jstatd 簡(jiǎn)介
jstatd工具是一個(gè)RMI服務(wù)器應(yīng)用程序,主要用于監(jiān)控HotSpot Java 虛擬機(jī)的創(chuàng)建與終止悼沿,并提供一個(gè)接口以允許遠(yuǎn)程監(jiān)控工具附加到本地主機(jī)上運(yùn)行的JVM上等舔。
jstatd服務(wù)器需要在本地主機(jī)上存在一個(gè)RMI注冊(cè)表。jstatd服務(wù)器將嘗試在默認(rèn)端口或-p port選項(xiàng)指定的端口附加到該RMI注冊(cè)表上糟趾。如果RMI注冊(cè)表不存在慌植,jstatd應(yīng)用程序?qū)?huì)自動(dòng)創(chuàng)建一個(gè),并綁定到-p port選項(xiàng)指定的端口上义郑,如果省略了-p port選項(xiàng)蝶柿,則綁定到默認(rèn)的RMI注冊(cè)表端口。你可以通過(guò)指定-nr選項(xiàng)來(lái)抑制內(nèi)部RMI注冊(cè)表的創(chuàng)建非驮。
3. 創(chuàng)建 jstatd.all.policy 文件
grant codebase "file:/usr/lib/jvm/java-8-oracle/lib/tools.jar"{
permission java.security.AllPermission;
};
其中file: 后面是 安裝的 jdk 所在路徑
4. 修改服務(wù)器 hosts 文件中的 IP 地址
服務(wù)器端應(yīng)該在 /etc/hosts 文件中把本機(jī)地址設(shè)為本機(jī)的 IP 地址交汤。使用 hostname -i 命令查看,如果顯示的是 127.0.0.1 或者與本機(jī)實(shí)際 IP 不一致的話(huà)劫笙,需要把 /etc/hosts 文件中相應(yīng)的地址改為本機(jī)實(shí)際 IP 芙扎。
例如輸入
$hostname -i
127.0.1.1
打開(kāi) /etc/hosts 文件,找到 127.0.1.1 這一行填大,將 127.0.1.1 改為本機(jī) ip(通過(guò) ip addr 獲冉渫荨)
5. 啟動(dòng) jstatd
screen jstatd -J-Djava.security.policy=jstatd.all.policy
如果沒(méi)有安裝 screen , 請(qǐng)自行安裝
執(zhí)行結(jié)束按 ctrl+A+D
6. 開(kāi)放相關(guān)的端口號(hào)
如果 jstatd 命令沒(méi)有用 -p port 指定端口號(hào)的話(huà),默認(rèn)占用的是 1099 端口允华,除了該端口圈浇,還會(huì)占用一個(gè)隨機(jī)端口
ethan@ubuntu:~/code$ netstat -nap | grep jstatd
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::1099 :::* LISTEN 3452/jstatd
tcp6 0 0 :::34703 :::* LISTEN 3452/jstatd
unix 2 [ ] STREAM CONNECTED 35371 3452/jstatd
得到另一個(gè)隨機(jī)端口號(hào)為 34703, 防火墻開(kāi)放 1099 和 34703
sudo ufw 1099
sudo ufw 34703
7. 本地連接測(cè)試
C:\Users\lenovo>jps -l rmi://192.168.2.128
4056 BusyThread
3452 sun.tools.jstatd.Jstatd
如果遠(yuǎn)程節(jié)點(diǎn)jstatd 不是 1099 節(jié)點(diǎn),則 ip 后需要加上端口號(hào)靴寂,例jps -l rmi://192.168.2.128:12345