jconsole/JvisualVM 監視jvm和遠程tomcat


以前做程序很少對程序的運行狀態做監控,今天決定對現在做的這個程序進行一下監控

監視jvm狀態的工具首選當然是jconsole或者JvisualVM,這兩個東西都是jdk自帶的,JVisualVM是自jdk1.6以后就有了,功能比jconsole強大

所以我就選擇了JvisualVM

JvisualVM可以在JAVA_HOME/bin/這個目錄下找到

使用JvisualVM的過程並不順利。

第一個出現的問題是 "無法檢測到本地java應用程序"。

網上找到不少解決方案,其中一個方案是在啟動java程序的時候添加一個參數即可:

-XX:+PerfBypassFileSystemCheck

 參考:http://my.oschina.net/building/blog/74626;

這種方案對於用tomcat的同學來說不是很方便,而且這也不是最佳的解決辦法

然后就找到了這個:http://blog.csdn.net/uusad/article/details/7979670,

說出現這個問題的原因是windows用戶名出現了大寫的字母,需要刪除臨時目錄,讓JvisualVM重新建臨時目錄

這里面有詳細說明。

然后是配置問題,也是找了好多資料都沒有看的很明白。

這個是說的比較好懂的:http://www.ahlinux.com/tomcat/22979.html

主要是在tomcat/bin/catalina.bat(windows)或者tomcat/bin/catalina.sh(linux)里面加上一段jmx的配置

windows需要加:

set JAVA_OPTS= -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=10004 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

linux需要加

JAVA_OPTS=' -Dcom.sun.management.jmxremote.port=1090 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false'

需要注意的是JAVA_OPTS這個參數需要注意,這個參數也是配置tomcat分配jvm內存配置參數,如:

 

JAVA_OPTS="-Xms1024m -Xmx4056m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m"

這段配置的意思是tomcat啟動是就分配java初始化堆棧大小(-Xms)為1024m,最大堆棧大小(-Xmx)4056m ,線程堆棧大小(-Xss)1024K,永久帶初始化(-XX:PermSize)256m,永久帶最大值(-XX:MaxPermSize)512m。說以在配這一段的時候直接加在這個后面就好了

JAVA_OPTS="-Xms1024m -Xmx4056m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

如果是監控本地程序還需要到jdk目錄的jre的manager下面修改一個文件.比如:

進入JDK安裝目錄,C:\Program Files\Java\jdk1.6.0_25\jre\lib\management,把jmxremote.password.template重命名,去掉后綴,改為jmxremote.password。

具體操作可以看上面給出的鏈接。

如果是監控遠程的tomcat就直接是先添加遠程主機,然后在遠程主機上添加jmx鏈接,填上剛才配置的端口就好了

如果遠程監控需要密碼控制的話-Dcom.sun.management.jmxremote.authenticate=false這個參數就需要改成true。

用戶名密碼可以指定文件-Dcom.sun.management.jmxremote.pwd.file=$JAVA_HOME/jre/lib/management/jmxremote.password

用戶和權限是存在$JAVA_HOME/jre/lib/management/jmxremote.access中

文件里面都有詳細的注釋,這里就不詳細介紹了。

 

附:

JAVA_OPTS和CATALINA_OPTS的區別,

上面我們用的配置全都是用JAVA_OPTS配置的,其實CATALINA_OPTS也可以完成該配置。它們之間的區別:

CATALINA_OPTS:只被當前tomcat以start,run或者debug命令執行時使用的jvm配置,比如heap size, GC logging, JMX ports etc.

JAVA_OPTS:任何命令執行時的java runtime jvm配置。能被tomcat和停止線程使用,大部分配置應該被配置 CATALINA_OPTS.

可以參考:http://stackoverflow.com/questions/11222365/catalina-opts-vs-java-opts-what-is-the-difference

 


免責聲明!

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



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