使用visualvm远程监控JVM
参考:http://blog.sina.com.cn/s/blog_4e90b3ba0100muco.html
1、首先要修改JDK中JMX服务的配置文件,以获得相应的权限:
在jdk-1.6.0_26/jre/lib/management找到jmxremote.password.template,
两种方法:
(1)使用该方法,则对应于步骤2中的(1)(2)(4)
a. 将jmxremote.password.template文件复制为jmxremote.password
b. 调整jmxremote.access和jmxremote.password的权限为只读写,可以使用如下命令
chmod 600 jmxremote.access jmxremote.password
c. 打开jmxremote.password文件,去掉
# monitorRole QED
# controlRole R&D
这两行前面的注释符号
(2)使用该方法,则对应于步骤2中的(1)(2)(3)(4)
a.拷贝jmxremote.password.template到JAVA应用所在用户(比如用户为admin)的家目录下的任一子目录,修改属主为admin
b.mv jmxremote.password.template jmxremote.password
c.chmod 600 jmxremote.access jmxremote.password
d.去掉注释
如下即采用方法2:
[admin@v125013136 management]$ ll
总计 28
-rw-r--r-- 1 root root 3998 2011-10-24 jmxremote.access
-r--r--r-- 1 root root 2856 2011-10-24 jmxremote.password.template
-rw-r--r-- 1 root root 14097 2011-10-24 management.properties
-r--r--r-- 1 root root 3376 2011-10-24 snmp.acl.template
[admin@v125013136 management]$ pwd
/opt/taobao/install/jdk-1.6.0_26/jre/lib/management
[admin@v125013136 management]$ ll
总计 28
-rw-r--r-- 1 root root 3998 2011-10-24 jmxremote.access
-r--r--r-- 1 root root 2856 2011-10-24 jmxremote.password.template //JDK是root用户的
-rw-r--r-- 1 root root 14097 2011-10-24 management.properties
-r--r--r-- 1 root root 3376 2011-10-24 snmp.acl.template
[admin@v125013136 management]$ cd /home/admin/ju/conf/
[admin@v125013136 conf]$ ll
总计 212
-rw-r--r-- 1 admin admin 38218 2010-08-03 bindings.xml
-rw-r--r-- 1 admin admin 87 2010-05-31 console-users.properties
-rw-r--r-- 1 admin admin 12113 2012-10-17 jboss-log4j.xml
-rw-r--r-- 1 admin admin 37315 2010-08-03 jboss-service.xml
-rw-r--r-- 1 admin admin 281 2010-08-03 jmx_console_jboss_web.xml
-rw-r--r-- 1 admin admin 3145 2010-08-03 jmx_console_web.xml
-rw------- 1 admin admin 2862 2010-05-31 jmxremote.password //JAVA应用为admin用户的,权限为600
2、修改jboss或tomcat启动文件中的JVM配置
JAVA_OPTS="-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=96m -XX:MaxPermSize=256m -XX:SurvivorRatio=10 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:CMSMaxAbortablePrecleanTime=5000 -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCompressedOops -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs -verbose:gc -Xloggc:/home/admin/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=$BASE_HOME/conf/jmxremote.password -Djava.rmi.server.hostname=$HOSTNAME"
(1)-Dcom.sun.management.jmxremote.port=1090 :这个是配置远程connection的端口号的,要确定这个端口没有被占用
(2)-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true:这两个是固定配置,是JMX的远程服务权限的
(3)-Dcom.sun.management.jmxremote.password.file=$BASE_HOME/conf/jmxremote.password:指定jmxremote.password文件所在路径
(4)-Djava.rmi.server.hostname=$HOSTNAME" :这个是配置server的IP的,要使用server的IP最好在机器上先用hostname –i看一下IP是不是机器本身的IP,如果是127.0.0.1的话要改一下,否则远程的时候连不上,目前我们的server上我已经都改好了(如-Djava.rmi.server.hostname=10.20.150.218)
3、Windows客户端配置