前言java
最近一個項目部署在服務器上運行時出現了問題,通過排查發現是java內存溢出的問題,因此爲了實時監控服務器java內存的狀況,須要遠程查看服務器上JVM內存的一些狀況。另外服務器系統是CentOS 7 最小安裝,沒有圖形化界面,不能採用vnc遠程。因此只能經過VisualVM或者JConsole來遠程JVM。sql
環境介紹安全
1. 服務器:CentOS 7(最小安裝) ip:192.168.22.249(示例) jdk:1.8
2. 客戶端:Windows jdk:1.8服務器
介紹兩個jdk1.8自帶的可視化監視工具jvm
Jconsole:工具
Java 6.x採用JMX方式提供了一系列監視和管理虛擬機的API,隨SDK一塊兒發佈的JConsole則是採用這些API實現監控虛擬機的使用工具。 JConsole可以提供被監控虛擬機的內存、線程、類的加載以及MBean等信息,從而可以對服務器的運行狀況進行實時監控。
JVisualVM:this
是Netbeans的profile子項目,已在JDK6.0 update 7 中自帶(java啓動時不須要特定參數,監控工具在bin/jvisualvm.exe),可以監控線程,內存狀況,查看方法的CPU時間和內存中的對 象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。spa
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方式實現遠程監控。