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

 

posted on 2016-03-30 17:58  paul liu  阅读(2567)  评论(0编辑  收藏  举报

导航