例如我的程序启动本来是
java test
现在改为
java -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false test
此时相当于启动程序的同时,启动了一个监听3333端口的服务器。
然后启动Java VisualVM
选择Add JMX Connection,填写host:localhost,端口3333
即可对test程序进行监控。
本地和远程 请参照http://java.sun.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html
http://www.javaeye.com/topic/516447 远程监控JVM--VisualVM
试了一下如何查看我的程序的jvm信息():
(1)按原来的方式启动jboss;
(2)写个policy文件,配置权限的,内容如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
(3)在cmd执行命令:jstatd -J-Djava.security.policy=路径/xx.policy,即已启动监控进程
(4)此后,可以使用很多其他bin下Java自带的工具来查看jvm信息,也可以用上述的VisualVM。
我自己试的是:
运行:jmap -histo 5816 >> a.txt 可以看到此时jvm所有对象信息(5816是jboss的进程号)
如
num #instances #bytes class name
--------------------------------------
1: 25903 15970576 [I
2: 137535 13397824 [C
3: 76574 8972120
4: 76574 6743712
5: 111338 4992688
6: 178790 4290960 java.lang.String
7: 7038 3945880
8: 8187 3861344 [B
。。。
798: 5 200 com..model.BucketTestUnit
1614: 1 40 com..BucketTestInteractBO$1
1728: 1 32 com..BucketTestInteractBO
1776: 1 32 com..BucketTestConfig
2010: 1 16 com..BucketTestBO
2343: 1 16 com..model.BucketTest
2374: 1 16 com..BucketTestAdvisor
582: 20 480 com..BucketTestParameter
附: JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta , JVM监控工具介绍