【Linux運維入門】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方式實現遠端監控。