1. 程式人生 > >Jstatd方式遠端監控Linux下 JVM執行情況

Jstatd方式遠端監控Linux下 JVM執行情況

 最近一個專案部署在伺服器上執行時出現了問題,經過排查發現是java記憶體溢位的問題,所以為了實時監控伺服器java記憶體的情況,需要遠端檢視伺服器上JVM記憶體的一些情況。另外伺服器系統是CentOS 7 最小安裝,沒有圖形化介面,不能採用vnc遠端。所以只能通過VisualVM或者JConsole來遠端JVM。

介紹兩個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=伺服器IP
#!/bin/bash
nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.1 &

2.啟動客戶端的VisualVM,新增遠端主機

VisualVM 在/java_home/bin目錄下

連線後會自動加載出伺服器JVM執行情況。

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

另外我們還可以為VisualVM安裝一些外掛,比如GC,MBeans等等。滿足自己的需要。下一篇部落格講解以JVM方式實現遠端監控。

原文連結

----------------------------------------------常見連結問題處理-----------------------------------------

(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方式連線遠端主機了