使用Memory Analyzer tool分析工具进行oom的解决优化
1、第一步,安装Memory Analyzer tool,我安装的是版本是MemoryAnalyzer-1.7.0.20170613

2、在内存溢出时,在linux操作系统导出内存快照,命令如下
生成内存快照
#jmap -dump:format=b,file=elipse.hprof 8052
3、使用MAT工具打开内存快照,点开报告看到主要的问题以及其所占用的内存大小

4、经分析,如下图有一个Model类占用内存比较大,主要问题之一有一个联想控件sql优化不够好、并且在代码中查询存在NEW对象造成资源浪费。为此,做了sql优化以及代码多处调整。

5、另外看到OJDBC包里面也有个引用类占用内存较高,考虑到项目现在使用的是OJDBC5,果断将版本提升到OJDBC14。

6、由于项目使用到DWR前端技术,在MAT工具也有看到DAR相关占用内存较大问题,因此分析应该是在前端不断去new对象导致,因此使用单例模式
贴上代码dwr_enginer.js

7、最后对JVM参数调优
我参考的是这里

翻译过来
具体来讲:
Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍
永久代 PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。
年轻代Xmn的设置为老年代存活对象的1-1.5倍。
老年代的内存大小设置为老年代存活对象的2-3倍。
浙公网安备 33010602011771号