关于java使用VisualVM进行分析

594zzb 发布于 2016/03/16 15:32
阅读 919
收藏 1

本人最近在学习了解jdk6自带的分析工具JVisualVM,这个工具不错,相对jprofiler来说,免费就是王道,然而这个vm不像jprofiler那样是脱离jvm运行的,这个我在本地启动tomcat服务的时候调用visualVM工具进行内存、cpu等分析时,一执行基本都会导致tomcat服务报内存溢出而自动停掉,因为VM这个东西是基于JVM上运行的。这么说,JVisualVM真的适合在测试和生产上进行分析么,因为这感觉有可能导致JVM运载负荷而使得服务宕机,这样对于生产环境是致命的。

我想请教下,你们一般是怎么使用JVisulaVM进行本地、测试、生产上的分析的(远程的我知道可以通过jmx和jstatd连接).我这里主要是想知道你们使用JVisualVM工具分析时,有没有也遇到JVM内存溢出的问题,你们一般是怎么避免这样的现象发生的?

诚恳求教,小弟在此谢过了

加载中
0
杨武兵
杨武兵

生产环境一般公司都会研发或者使用一些开源的应用监控工具,这些工具都会有jvm的堆、线程、cpu等信息的。我想说的是任何监控工具、任何日志都会消耗系统资源。但是这些资源的消耗给你带来的是系统的可管理性,可维护性。而这对于运维人员来说也是非常有价值的,如果我们什么都不知道,系统的运行状况不可提前告警,提前预防解决,出了问题两眼一抹黑,那不是瞎了吗?JVisualVM我觉得也是可以用于生产的,系统资源的消耗应该也是可以配置的。

如何避免内存溢出?

设计和写代码的时候就应该注意不要产生大批量的对象,比如从数据库、磁盘里加载全部的数据到对象里,这就应该避免,应该细水长流,一批一批加载,一批批处理;注意不再使用的对象要清除引用关系,让GC可回收。尽量缩短对象的生命周期;内存的缓存对象要控制数量,数量多了要增加回收机制。等等吧。

其它的就是你的出现了问题之后自己去排查问题了。通过jmap导出对象然后分析java堆中对象一般都能找出问题所在,再去看这些可疑对象是在何处产生的,如何解决应该就有思路了。


0
5
594zzb

应该很多人都没有关注过这个1.6后升级自带的玩意,了解下对于一些高并发异常、cpu、内存溢出的问题分析是很有用处的。如果装的是1.6的jdk或者以上的,是自带无须安装的,在bin目录下,双击jVisualVM即可

一个普通简介的传送门:

http://ju.outofmemory.cn/entry/111869

http://my.oschina.net/gaojianwen/blog/479976?fromerr=wJ0xHx6y

0
5
594zzb
http://blog.csdn.net/wisgood/article/details/25343845
返回顶部
顶部