Jstatd方式遠程監控Linux下 JVM運行情況


前言

最近一個項目部署在服務器上運行時出現了問題,經過排查發現是java內存溢出的問題,所以為了實時監控服務器java內存的情況,需要遠程查看服務器上JVM內存的一些情況。另外服務器系統是CentOS 7 最小安裝,沒有圖形化界面,不能采用vnc遠程。所以只能通過VisualVM或者JConsole來遠程JVM。


環境介紹


1. 服務器:CentOS 7(最小安裝) ip:192.168.22.249(示例) jdk:1.8 
2. 客戶端:Windows jdk:1.8


介紹兩個jdk1.8自帶的可視化監視工具

Jconsole:

Java 6.x采用JMX方式提供了一系列監視和管理虛擬機的API,隨SDK一起發布的JConsole則是采用這些API實現監控虛擬機的使用工具。 JConsole能夠提供被監控虛擬機的內存、線程、類的加載以及MBean等信息,從而能夠對服務器的運行情況進行實時監控。 

JVisualVM:

是Netbeans的profile子項目,已在JDK6.0 update 7 中自帶(java啟動時不需要特定參數,監控工具在bin/jvisualvm.exe),能夠監控線程,內存情況,查看方法的CPU時間和內存中的對 象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。

 

VisualVM和JConsole在監控本地JVM的時候是很方便的。只要應用程序運行起來,我們就可以連接上本地JVM,從VisualVM里面監控JVM的情況。

遠程服務器上的JVM監控就需要一些額外的配置。目前VisualVM支持兩種監控方法:Jstatd方法和基於JMX的方法。


這篇博客我們先介紹Jstatd方法

jstatd是一個rmi的server應用,用於監控jvm的創建和結束,並且提供接口讓監控工具可以遠程連接到本機的jvm 。jstatd位於 $JAVA_HOME/bin目錄下,具體使用方法如下: 

1,啟動RMI服務

在需要被監控的服務器上面,通過jstatd來啟動RMI服務 
首先,配置java安全訪問,在服務器jdk路徑(/java_home/bin)下新建文件 
名稱: jstatd.all.policy 
內容:

grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };

然后在進入jstatd.all.policy所在目錄下,通過如下的命令啟動RMI服務:

./jstatd -J-Djava.security.policy=jstatd.all.policy 

或者

./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.22.249

 

這里寫圖片描述
 

 

2.啟動客戶端的VisualVM,添加遠程主機 

這里寫圖片描述

 

VisualVM 在/java_home/bin目錄下

連接后會自動加載出服務器JVM運行情況。

 

這里寫圖片描述 


這里寫圖片描述
圖片分享:

 

在Jstatd監控方式下,JConsole是不能啟用的,因為JConsole登錄需要端口號。


另外我們還可以為VisualVM安裝一些插件,比如GC,MBeans等等。滿足自己的需要。下一篇博客講解以JVM方式實現遠程監控。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM