From : http://tianya23.blog.51cto.com/1081650/311984
最近VisualVM很火,热度甚至超过了Jconsole。( 关于Jconsole的使用步骤如下:步骤1、在命令行输入:jconsole,或在java的bin下面双击‘jconsole.exe’启动
步骤2、输入需要连接的远端的ip:端口,如10.20.153.188:9999, 能连接的前提是在服务器上启动了相关进程
)
自己的使用情况是如下:
1、VisualVM启动
(1)服务器端启动
步骤1: 在Linux服务器上建立文件:jstatd.all.policy, 文件内容为:
grant codebase
"file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
步骤2:在linux服务器上启动该文件
jstatd -J-Djava.security.policy=jstatd.all.policy
jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-
Djava.rmi.server.logCalls=true
最好后台启动该服务,使用如下方式:
nohup jstatd -J-Djava.security.policy=jstatd.all.policy &
(2)客户端启动
在安装了Java的客户端,在bin下面存在着jvisualvm.exe的程序。
步骤2:在visualVM/visualvm_122-ml/visualvm_122/bin下面直接点击visualvm.exe即可 启动客户端。添加远程服务器,在该服务器上点击‘添加jstatd连接’,使用默认的端口1099,点击确认之后即可和服务器建立连接。
2、原理分析
3、使用中遇到的问题
问题1:
在服务器中启动一段时间(比如好几天)后,存在客户端访问不到服务器上相关的Java进程的问题。
解答: 这是由于Jstatd采样数据是检测在它自身启动时间之前的进程的相关信息,之后启动的Java进程的相关信息将不再纳入到其收集的范围内,此时需要关掉服务器上的visualvm相关的进程,再启动,则可正常的在客户端使用了。
问题2:启动的时候出现:Could not bind /JStatRemoteHost to RMI Registry
问题:默认的1099端口冲突了
So I changed to port 1982 because I read somewhere that JBoss binds the naming to 1099,code like this: 启动方式: jstatd -J-Djava.security.policy=jstatd.all.policy -p 1982
连接的时候使用如下方式进行:
ip:1982
4、Visual VM的插件
插件安装步骤:
To install a plugin from VisualVM Plugins Center follow these steps:
5、调节GC大小
----------------------------------------------------------------------------------------------------------------------------------
二、JConsole
1、远程连接端口
远程连接相关的java进程:使用jps产看进程,使用jps pid查看port; 也可以通过
netstat -anp | grep pid查看使用的端口。
- netstat -anp | grep 9836
- tcp 0 0 172.29.63.17:1399
172.29.63.17:37769 ESTABLISHED 9836/java
2、使用jconsole监控Jboss
jconsole远程监视的配置步骤如下:
服务器端:
在JBoss的 /bin/run.sh中
JAVA_OPTS="$JAVA_OPTS -Dprogram.name= 加上
-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
客户端连接服务器端的port为:1099,启动netstat -nap|grep 1099 查看1099端口是否已在监听
客户端配置参见: http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
jconsole文档地址:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jconsole.html
就在启动脚本的java参数中加入:
-Dcom.sun.management.jmxremote.port=1099Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
3、监控Activemq的远程端口
在Activemq中,提供了端口给外面的jconsole连接的端口,可以在activemq.xml配置文件中进行
- <
managementContext
>
- <
managementContext
createConnector
=
"true"
connectorPort
=
"1399"
/>
- </
managementContext
>
三、Jprofiler
问题1:查看内存中的所有对象
"Go To" -> "All Objects", 打开之后可以按照各种情况进行排序
问题2:展开调用树
“Go To” -> "Allocation Call Tree", 再右键点击“expand mutiple level”展开整个调用树
问题3:服务器端开启远程访问端口
JAVA_OPTS="$JAVA_OPTS -agentpath:/home/forum/jprofiler/bin/linux-x64/libjprofilerti.so=port=
10004 "
jprofiler的默认端口为8849,可以调整。 eg:-agentpath:/home/forum/jprofiler/bin/linux-x64/libjprofilerti.so=port=10004