《JAVA 程序性能优化》笔记:性能调优工具之Java VisualVM配置

  1. VisualVM 的用途:监控内存泄露,跟踪垃圾回收,内存分析、cpu分析,线程分析.
  1. VisualVM下载:

 

  • 方法2: 下载并安装JDK(例如,jdk1.6.0_43),  解压后,运行bin目录下的jvisualvm.exe即可

 

对于这种方式,可能会遇到这样的问题,Eclipse无法监控。此时,我们需要在桌面创建一个快捷方式,

右键快捷方式选择属性,在“目标”栏中追加"-XX:+PerfBypassFileSystemCheck",自动识别到本地的运行的java 应用

 

 

PS: 对于这种方式,我没有成功,出现visualVM闪退的现象,在网上找了几个解决方案,仅供参考

可能原因以及解决方法:

  • jvisualvm对ntfs的硬盘格式支持的不好
  • jvisualvm不支持FAT323格式,所以不得不转换成ntfs格式
  • C:\Windows\Temp 没有权限访问,需要更改权限。原因是jvisualvm会把数据写入这个目录里
  • 如果无法运行,打开eclipse/my eclipse, 在右键选择要执行的类,选择Run As-->Open Run Dialog,在新窗口中选择Arguments标签。

vm参数上增加:-XX:+PerfBypassFileSystemCheck

 

  1. 配置 - 监控本地运行的java 程序

程序运行后会自动监控本机运行的java程序(Local标签下,远程服务器上的java程序需要另行配置),如果是下载的jvisualvm,解压后,运行bin目录下的jvisualvm.exe即可.

 

我是选择下载,解压后,运行bin目录下的jvisualvm.exe(使用的版本是:visualvm_138)。然后打开Eclipse,此时看到如下图:

 

Local标签下的第一个VisualVM为jvisualvm对自身的监控,可以看到消耗的资源还是很少的,第二个为本机的eclipse

 

 

  1. 配置 - 监控服务器上的java程序

要预先启动jstatd服务(${java_home}/bin目录下)

 

jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序(后台进程),要保证远程监控软件连接到本地的话需要jstatd始终保持运行。

jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件

 

例如:

我设置的Java home 目录:/usr/java/jdk1.6.0_45

新建一个策略文件jstatd.all.policy(我放在了/usr/java/jdk1.6.0_45/bin目录下),在里面添加以下内容来保证jstatd服务启动的时候不报异常(设置权限从只读到可读写):

grant codebase "file:/usr/java/jdk1.6.0_45/lib/tools.jar" {  
    permission java.security.AllPermission;  
};

查看1099端口是否被占用了,如果被占用,则需要选择其他端口来启动jstatd服务

test@sha> netstat -ano | grep -i 1099

如果端口被占用,选择其它端口(例如5004),用以下方式启动jstatd服务:

test@sha> rmiregistry 5004 &
test@sha> ./jstatd -J-Djava.security.policy=./jstatd.all.policy -p 5004 &

如果没有被占用,然后使用这个策略文件启动jstatd服务,因为监控的过程中需要jstatd服务一直运行,所以加上了&

test@sha:/usr/java/jdk1.6.0_45> cd bin
test@sha:/usr/java/jdk1.6.0_45/bin> ./jstatd -J-Djava.security.policy=./jstatd.all.policy &

因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:

test@sha:/usr/java/jdk1.6.0_45/bin> ./jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.logCalls=true

检查启动的PID进程(Jstatd)

test@sha:/usr/java/jdk1.6.0_45/bin> jps
7871 Jstatd
7938 Jps

杀掉启动的PID进程(7871 Jstatd)

test@sha-colline-node-h:/usr/java/jdk1.6.0_45/bin> kill -9 7871

接下来就可以在jvisualvm中配置监控该服务器上运行的java程序了

 

填写主机名:

 

配置完成

 

默认端口是1099, 如果需要修改端口,则右键Add jstatd Connection

 


连接成功

 

 

PS: 常见问题

需要特别注意的是,有时在配置远程监控java程序的时候jvisualvm会报一个错误

点击查看错误详情:


 connectionrefused to host:127.0.0.1初步判断和主机名有关系

 

需要设定hostname 为ipv4地址

test@sha> hostname -i
127.0.0.1
test@sha> hostname 172.20.30.8 

  1. 插件:推荐一个好用的插件VisualGC

jvisualvm也是可以安装插件的,具体步骤为tool -> plugin ->aviable plugin

安装完这个插件后,将会增加新的监控条目Visual GC,可以看到虚拟机内存各个区的使用情况

 

帮助文档:

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html jstatd的帮助文档

http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html Java VisualVM帮助文档

 

参考文档:

http://blog.csdn.net/a19881029/article/details/8432368 (Java jvisualvm简要说明 )

http://blog.csdn.net/derek_zhang_/article/details/46043547 (visualvm remote access denied )

http://stevex.blog.51cto.com/4300375/771990 (JAVA VirtualVM远程监控配置 )


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值