jvisualvm遠端監控java虛擬機器
我是使用java -jar ×× 執行java程式,其實tomcat也差不多也是在catalina.sh中配置rmi的一些東西,詳情見下面:
1、jstatd遠端不可取【血淚】
1、配置jstatd
vi $JAVA_HOME/jre/lib/security/Java.policy
在檔案末位的 }; 前新增
permission java.security.AllPermission;
2、啟動jstatd
cd $JAVA_HOME/bin
./jstatd -J-Djava.security.policy=all.policy &
啟動後會開啟註冊埠1099和一個隨機的連線埠,註冊埠也可通過-p引數指定,如./jstatd -J-Djava.security.policy=all.policy -p 10003 &
除了把1099新增到防火牆規則外,還需要找到另外一個隨機埠,也加入到規則中
執行
netstat -anp | grep *jstatd
3、其他校驗
(1)用hostname -i 命令檢視返回的IP地址是不是127.0.0.1,如果不是的話則說明是其它原因造成,無需再往下看了,否則進行入第2步。
(2)開啟/etc下的hosts檔案,將其中的“127.0.0.1 機器名”改成"你機器的IP 機器名"。
例如:將127.0.0.1 ubuntuServer,改成192.168.1.99 ubuntuServer
(3)重新啟動jstatd程序。 如果在本地用jps 192.168.1.99可以看到遠端java程序則說明成功了,此時你應該可以在VisualVM中通過jstatd方式連線遠端主機了
4、解決問題
策略1、如果無法檢視 關閉Linux上的防火牆試試
1) 重啟後生效 開啟: chkconfig iptables on 關閉: chkconfig iptables off
2) 即時生效,重啟後失效 開啟: service iptables start 關閉: service iptables stop
策略2、還是無法連線遠端並且jps使用正常
1、檢視telnet服務是否開啟,開啟telnet服務【關閉無法遠端jvm】
策略3:一般jdk版本要高於遠端機器版本
5.其它事項
(1)使用遠端主機監控方式,即jstatd方式時,每次啟動工具時會自動檢測並連線已配置的監控主機,但無法提供遠端主機記憶體的快照和具體資訊,僅可提供cpu和記憶體的使用監控資訊,使用jmx方式連線,如果遠端的java程序重啟,則需要重新建立連線,因為遠端的java程序ID已變化 。、
(2)同時在jvisualvm中新增JMX連結,就可以想本機一樣檢視記憶體、執行緒資訊。具體配置如下。
2、jconsole
設定vm堆大小以及,配置遠端監控引數
設定遠端埠為8999,不需要使用者名稱密碼驗證,初始化堆記憶體為64M、最大堆記憶體為128M、新生代為20M,Survivor區與Eden區記憶體為2:8
Java -Djava.rmi.server.hostname=主機ip -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar -Xms64M -Xmx128M -Xmn20M -XX:SurvivorRatio=2 ./live-scheduled-0.0.1-SNAPSHOT.jar
此時就可以用jconsole工具進行遠端監控了,只需要使用主機ip+埠就可以連線成功
如果要讓遠端監控連線需要密碼那麼配置如下
java -Djava.rmi.server.hostname=主機IP -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxrete.ssl=false -Dcom.sun.management.jmxremote.pwd.file=/data/java/jdk1.8/jre/lib/management/jmxremote.password -jar -Xms64M -Xmx128M -Xmn20M -XX:SurvivorRatio=2 ./live-scheduled-0.0.1-SNAPSHOT.jar
並將jre目錄下面jre/lib/management目錄下面jmxremote.password.template複製一份到該目錄,命名為jmxremote.password,然後將jmxremote.password檔案內容全刪除掉,
然後配置兩個使用者,一個為只讀許可權,一個為控制權限,檔案內容如下
- monitorRole 密碼
- controlRole 密碼
然後在遠端監控時就需要用使用者名稱和密碼連線了。
3、idea遠端debug
點選edit configurations, 出現remoete,或者點選“+”新增,
IP和埠和服務端一致,選擇專案相同,服務端執行
java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -jar zuul-data-server-1.0.0.jar
服務端啟動程式碼,idea啟動debug模式,就可以愉快的debug了。