JVM性能監控工具-Jvisualvm

用法:Jvisualvm是JDK自帶的一款性能分析工具

使用方式:

1.配置好JDK環境變量

1.本地JVM監控略

2.遠程JVM監控

 

用JMX對Resin內存狀態進行監控 ,可以看到本地所有可監控的JVM實例。

原理就是通過添加一些JMX相關的JVM啓動參數來控制JMX的行爲,例如端口,驗證信息等。Resin3.1.X版本的配置文件中有一些設置JVM args的配置項目,可以直接在裏面修改。
 

Resin配置不使用認證的方式連接遠程的服務器

步驟如下:

1.修改遠程服務器的resin.conf或者resin.xml文件,對於jvm參數配置這節添加或更改如下內容

<jvm-arg>-Dcom.sun.management.jmxremote.port=9999</jvm-arg>  

<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>  

<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>  

<jvm-arg>-Djava.rmi.server.hostname=192.168.1.144</jvm-arg> 

注意紅色部分,authenticate=false是關閉授權,hostname和port都是你連接必須的指定的IP和端口。

 經過以上配置後你就可以在遠程機器上用IP和端口9999進行遠程Resin實例的監控了,記住防火牆要開放相應端口的訪問。

注意:以上方法不只限於Resin,參數作用的是JVM,對任意JAVA程序都是適用的,舉例如:

java -Xdebug -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.port=10000 -Djava.rmi.server.hostname=192.169.100.159

原始resin.xml

 

配置安全驗證:

 

設置步驟:

1.修改jmxremote.password文件的權限,設置爲只有owner可讀,chmod 600 jmxremote.password,權限設置錯誤,就會導致連接不上

2.修改jmxremote.access文件

3.修改jmxremote.password 添加內容:

 

jmxremote.access文件主要創建用戶和設置用戶權限

jmxremote.password文件設置用戶密碼

 

參數配置:

<jvm-arg>-Dcom.sun.management.jmxremote.port=9999</jvm-arg>

<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=true</jvm-arg>

<jvm-arg>-Djava.rmi.server.hostname=192.168.1.144</jvm-arg>       

<jvm-arg>-Dcom.sun.management.jmxremote.access.file=$JAVA_HOME/jre/lib/management/jmxremote.access</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password</jvm-arg>
  

 $JAVA_HOME是你的環境變量的值,建議你將Java安裝目錄下面jre/lib/management/jmxremote.password.template這個文件拷貝一份,另存一個文件名,將文件中的用戶名密碼這一項前的註釋取消並且更換爲自己的用戶名和密碼。也可以將$JAVA_HOME/jre/lib/management下有jmxremote.access和jmxremote.password的兩個文件複製到$TOMCAT_HOME/tomcat/bin目錄下

 

 主機JVM CPU與JVM內存圖

 

類加載與線程

 

此工具也可以手工執行垃圾回收和堆快照Dump

 

安裝插件:

 

查看Visual GC插件:

配置方法:

1.在$JAVA_HOME/bin目錄下新建jstatd.all.policy文件

2.在文件裏穿件如下內容:

grant codebase "file:${java.home}/../lib/tools.jar" {

               permission java.security.AllPermission;

          };

3.給jstatd.all.policy授予執行的權限:chmod 777 jstatd.all.policy

4.在當前目錄下,執行:jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.144 &

或者

jstatd -J-Djava.rmi.server.hostname=192.168.1.169 -J-Djava.security.policy=/usr/local/java/jdk1.6.0_45/bin/jstatd.all.policy

5.添加jstatd連接

 

注意:在JMX創建的連接,無法查看Visual GC,但是可以重啓或者用用戶名認證在查看卻可以

其他插件:

Jconsole配置:

jdk1.7需要下載Jtop.jar包才能展示

加載D:\Java\jdk1.7.0_80\demo\management\JTop下的包

這個包需要自己下載,或者在jdk-6u20-windows-x64.exe版本安裝完成後就存在,拷貝到jdk.1.7即可

 

環境:

centos6,tomcat7,jdk1.7

解決方案:
1,在服務器上找到catalina.sh文件,在該文件的這一行
# ----- Execute The Requested Command -----------------------------------------

上面添加以下內容:
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.2 -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.managem
ent.jmxremote.authenticate=false"
然後啓動tomcat進程

Tomcat上的配置參數:

catalina.sh用於修改linux的jmx。具體修改方 法是一樣的。
在 rem ----- Execute The Requested Command --------------------------------------- 
加入: 
set JAVA_OPTS=-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8050 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password 

  

如果同樣遇到提示 必須限制口令文件的讀取權限 
或者: 
set JAVA_OPTS=-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8050 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

  

Jvisualvm監控配置:

1、jboss啓動腳本(如果是liunx則在環境變量JAVA_OPTS)中,jvm參數添加如下內容:
 -Djava.rmi.server.hostname= #指定rmi地址,爲jboss所在機器ip
 -Dcom.sun.management.jmxremote.port= #指定jmx端口
 -Dcom.sun.management.jmxremote.ssl=false #是否使用ssl安全連接
 -Dcom.sun.management.jmxremote.authenticate=false #是否需要驗證

2、打開本地命令窗口,進入$JAVA_HOME/bin目錄,輸入Jvisualvm.exe回車
  打開Jvisualvm登陸界面,輸入:
  a、service:jmx:rmi:///jndi/rmi://10.25.7.27:9999/jmxrmi
  (b、用戶名c、密碼)
  登錄就OK了
3、第二步中如果配置了驗證則輸入用戶名密碼,否則有沒有輸入都無關緊要
  添加驗證步驟如下:
  a、$JAVA_HOME/jre/lib/management/jmxremote.password.template 密碼示例文件
  b、$JAVA_HOME/jre/lib/management/jmxremote.access 用戶定義文件
  (1)複製密碼文件到自定義目錄,去掉密碼文件中monitorRole前邊的#(去掉註釋)
  (2)chmod 600 (密碼文件)    修改爲只有當前登錄用戶能修改和閱讀該密碼文件
  (3)啓動腳本中添加或者修改:
  -Dcom.sun.management.jmxremote.authenticate=true
  -Dcom.sun.management.jmxremote.password.file=$JBOSS_HOME/jmxremote.password
  c、重啓即可
  
注:
1、環境變量示例:
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=256m  -XX:MaxPermSize=256m -Dfile.encoding=UTF8  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999  -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=true  -Dcom.sun.management.jmxremote.password.file=$JBOSS_HOME/jmxremote.password"

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=256m
-Dfile.encoding=UTF8 -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=$JBOSS_HOME/jmxremote.password"

 

配置認證登陸:

 

配置java認證文件:

修改配置文件:

1.jmxremote.access

2.jmxremote.password

3.修改jmxremote.password文件的權限,設置爲只有owner可讀,chmod 600 jmxremote.password,權限設置錯誤,就會導致連接不上

4.連接:

可以看到java的所有進程:

發佈了37 篇原創文章 · 獲贊 20 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章