java.lang.OutOfMemoryError内存泄露 代码定位及优化
来源:互联网 发布:唯品会与淘宝的区别 编辑:程序博客网 时间:2024/05/02 02:32
问题现象:
20并发登录系统户,刚开始所有指标正常,压测10分钟左右后,页面报java.lang.OutOfMemoryError,系统无法登陆,脚本无法正常压测,出现内存泄露,如图:
监控分析:
查看到应用服务器CPU一致持续97%以上,
监控JVM,堆内存每次回收不彻底,无法正常释放,持续加压下heap内存消耗完,最终导致服务宕掉,无法访问系统页面。可确定,代码存在内存泄露
如图红色箭头为处为20并发压测系统的现象:
优化解决:
①、先手动配置参数,调整heap区大小:
JAVA_OPTS="-server
-Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit"
②、dump出20并发下导致系统内存泄露信息,利用EclipseMAT对线程代码进行分析,如图红圈处导致内存泄露代码相关信息:
需要开发优化此处代码(开发优化为:登陆模块移除缓存设置,改用系统启动加载一次 ),
优化的代码如下:
EHCacheUtil.initCacheManager();
EHCacheUtil.initCache("pubthlpcache");
Pubthlp pubthlp=new Pubthlp();
List<Pubthlp> pubthlpList = pubthlpService.getPubthlpListByObj(pubthlp);
EHCacheUtil.put("cacheList", pubthlpList);
这个缓存 每次new 都很消耗java JVM内存,压力测试每次都new 内存有限的情况下直接内存泄露
优化该代码:去掉缓存每次new
优化代码后:
重新执行20并发压测,内存泄露问题解决,服务器CPU利用正常,监控JVM heap消耗及垃圾回收正常,系统登录操作正常,如图:
GC频率快,还需分析调整JVM参数
- java.lang.OutOfMemoryError内存泄露 代码定位及优化
- 内存泄露java.lang.OutOfMemoryError: PermGen space解决方法
- 内存泄露java.lang.OutOfMemoryError: PermGen space解决方法
- sun jdk内存泄露解析之java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError及解决方案
- 线上java.lang.OutOfMemoryError问题定位三板斧
- Java内存泄露与定位
- Android中内存泄露代码优化及检测
- Java 内存溢出(java.lang.OutOfMemoryError)
- java 代码优化 优化内存使用 防止内存泄露 优化代码规范 提高效率
- java 代码优化 优化内存使用 防止内存泄露 优化代码规范 提高效率
- JVM启动内存错误 java/lang/OutOfMemoryError
- java.lang.OutOfMemoryError: PermGen space 内存溢出
- 内存溢出问题(java.lang.OutOfMemoryError)
- tomcat报内存溢出 java.lang.OutOfMemoryError
- java.lang.OutOfMemoryError内存溢出问题解决方法
- 内存溢出--java.lang.OutOfMemoryError: PermGen space
- tomcat内存java.lang.OutOfMemoryError: PermGen space
- Docker生态圈工具
- Hadoop对JDK版本的兼容情况
- JavaScript创建对象--AngularJs开发秘籍笔记
- 自定义Dialog
- 中断的上半部分与下半部分
- java.lang.OutOfMemoryError内存泄露 代码定位及优化
- 【九度】题目1064:反序数
- RHEL7 忘记密码修改root密码
- 从零开始的Python入门教程4(条件语句)
- Mysql数据库优化
- 使用golang生成证书
- Centos 安装PHP Nginx
- datatables 前端表格插件 初始化表格插件
- 设计模式之工厂方法模式