`
haoweishow
  • 浏览: 63001 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

使用visualgc优化sunjdk应用

阅读更多

首先,感谢 IcyFenix 的 《深入理解Java虚拟机:JVM高级特性与最佳实践》,受书中对eclipse调优的影响,如法炮制,对我们的应用进行了一次尝试。

 

书中讲到的是通过sunjdk中自带的visualVM的visualgc插件,获取eclipse启动过程中内存使用情况。

 

但我们这边条件有限,甲方的电脑不允许上网,自己就把我本地装有插件的Jdk拷贝过去,发现拷贝过去的visualVM插件一个都没有。。。没找到原因。

 

在网上搜索visualgc的插件信息,得到的结果是:

Some third-party plugins need to be installed from a downloaded .nbm file:

 

Visual GC Plugin. Integration of the Visual GC tool into VisualVM.

 

visual gc插件跟visualvm是一伙的。。。visualvm插件下载

 

 

不死心,有继续google,终于找到我想要的了:

Visual Garbage Collection Monitoring Tool

在oracle的这个页面可以看到下载按钮download,东西不大,150KB。

 

#20140923更新内容>>

该工具oracle官网的介绍地址:http://www.oracle.com/technetwork/java/visualgc-136680.html

下载连接:http://www.oracle.com/technetwork/java/jvmstat-142257.html

添加附件:jvmstat-3_0.zip

#20140923更新内容<<

 

解压后目录结构如下图:

目录结构

修改bat/visualgc.cmd批处理文件,添加环境变量信息:

set JVMSTAT_JAVA_HOME=D:\ProgramFiles\jdk1.6.0_26

 

1. 监控本地java进程:

    直接执行命令:visualgc.cml <pid>   #pid是本地java进程号,必输项

 

2. 监控远程java进程:

    过程曲折,直接说我的使用过程。

    2.1 开通远程系统java环境rmi权限:

          在远程系统的如下目录:jdk1.6.0_26\jre\lib\security

          修改java.policy文件,在文件倒数第二行如下,添加标红的内容:

permission java.util.PropertyPermission "java.vm.version", "read";

permission java.util.PropertyPermission "java.vm.vendor", "read";

permission java.util.PropertyPermission "java.vm.name", "read";

permission java.security.AllPermission;

        };

 

    2.2 启动远程系统rmi监听端口:

         在远程系统上执行命令:

         jstatd -J-Djava.security.policy=all.policy #默认端口1099

         jstatd -J-Djava.security.policy=all.policy -p 9998  #指定端口9998

 

         如果没有2.1的操作步骤,会出现下面的异常:

         Could not create remote object

access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)

java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)

        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)

        at java.security.AccessController.checkPermission(AccessController.java:546)

        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)

        at java.lang.System.setProperty(System.java:725)

        at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)

 

     2.3 在本地系统开启visualgc监控客户端:

         执行命令:visualgc.cmd <pid>@ip:port 

         就可以打开visualgc的可视化界面。

 

     2.4 对压力测试环境的应用进行监控,发现内存分配有些不合理,经过调整,系统的TPS从300+,一直稳定在380,经过visualgc的分析,能够直观的看到内存的情况,效果还是有所提升的。

 

     2.5 存在的另一个问题,压力测试环境使用的sun的jdk,但是其他的开发环境,uat测试环境,生产环境都使用的jrockit的jdk。这个工具不能对jrockit进行监控,尝试了一下,启动本地系统客户端的时候出现空指针错误,无法启动。使用jrmc,发现对内存这块没有visualgc这么简单明了,或者是我不会用吧。继续学习。

 

分享到:
评论
4 楼 haoweishow 2014-09-23  
bo_hai 写道
能分享一个 visualgc 3.0 版本吧?国外的网站很难下载呀!

更新了博客,增加了这个工具的附件.
3 楼 haoweishow 2014-06-13  
bo_hai 写道
能分享一个 visualgc 3.0 版本吧?国外的网站很难下载呀!

在oracle的官网上找到了visualgc的介绍,http://www.oracle.com/technetwork/java/visualgc-136680.html#VisualGC,回去再找找下载连接
2 楼 bo_hai 2014-04-21  
能分享一个 visualgc 3.0 版本吧?国外的网站很难下载呀!
1 楼 宋建勇 2013-07-12  

相关推荐

Global site tag (gtag.js) - Google Analytics