`
shoushou2001
  • 浏览: 32915 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

借助MAT、VisualVM进行JVM性能调优

阅读更多

       公司有一个老的营销系统,是基于JDK1.4开发的,原来是集成在公司的协同办公平台上,这个系统问题可真不少,特别不稳定,经常会发生内存溢出现象,一天要自动关闭服务好几回,不仅影响了使用这个系统的人,也严重影响使用协助办公平台的人,更给管理员带来不少麻烦。借着给协同办公平台升级的时机,我决定改进一下营销系统的运行状况。

  处理这种问题的第一步:应用分离,把影响控制到最小范围内。首先是把这个营销系统跟协同办公平台分离,各自部署一个应用,然后提供单点登录,让使用营销系统的人可以在使用协同办公平台的时候直接登录到营销系统。这样子,即使营销系统出了问题,也不会影响到其他人使用营销办公平台。

  第二步:查找问题所在,为什么这个系统会这么频繁地发生OME现象?用MAT对导出的二进制堆文件做分析,发现占据了一半内存的对象是CacheModel,CacheModel是iBatis的缓存对象。分析这个系统,很多时间都是在做CRUD操作,我的判断是,缓存有多余的,或是没有发挥其应有的功能,于是,果断地把iBatis缓存关闭。再观察,OME现象已有好转,用MAT观察,没发现占据多数内存的对象,但情况仍不容乐观,仍然会经常发生OME现象,于是,怀疑的重点转系到JVM的垃圾回收。

  第三步:升级JDK,直接部署在JDK1.6上,修改了几个不兼容的类之外,系统能够正常启动,也能够正常访问使用。与JDK1.4相比较,JDK1.6在垃圾回收上有了很大的改进,用VisualVM观察,系统连续运行100个小时,没发生OME现象,并且堆的分配和回收也没有什么异常现状,OK.

     至此,使用MAT、VisualVM协助进行JVM性能调整的工作有个不懒的结果。^_^

0
0
分享到:
评论
3 楼 wangen2009 2015-01-09  
写的很粗糙,只能算是个人心得
2 楼 shoushou2001 2011-06-20  
langyu 写道
OME的时候有dump heap文件么?我怀疑还是与系统代码有关


系统代码确实存在一些问题,不过是旧系统,而且最近也在开发新的替换系统,现在能够正常运行也就达到调整的目的了,用MAT观察已看到不到占用内存比较大的对象存在。

BTW: 1、-XX:+HeapDumpOnOutOfMemoryError在OME的时候生成dump heap
     2、VisualVM可以导出dump heap
1 楼 langyu 2011-06-20  
OME的时候有dump heap文件么?我怀疑还是与系统代码有关

相关推荐

Global site tag (gtag.js) - Google Analytics