问题记录---java程序内存溢出
来源:互联网 发布:mathematics软件安卓 编辑:程序博客网 时间:2024/04/24 00:37
前段时间公司更新了新版本的业务系统,并进行了并发测试,并发数仅为20人左右,测试跑到3天左右,系统就开始奔溃了,查看日志信息。错误如下:
系统使用了thrift框架来进行服务的发布,从日志中可以看出由于java.lang.OutOfMemoryError: GC overhead limit exceeded原因导致了thrift服务端负责select线程的异常退出,服务端无法接受到请求。出现异常的thrift的源码如下:
通过查找资料得出,GC overhead limit exceeded 是JVM定义的一个策略,通过统计GC时间来预测是否要OOM了,提前抛出异常,防止OOM发生。因为GC发生在堆区,所以得出结论为,Java堆区内存溢出导致程序异常。所以当天早上9点重新启动项目进行并发测试,并使用了jvisualvm工具(jvisualvm工具为jdk自带的图形化的jvm性能监控工具)对程序JVM的内存区域进行了监控。发现随着时间的增长,其堆内存增长迅速,在当天下午7点的时候堆内容已经从开始的50M左右增长到600多M。经过对比分析不同时间生成的堆转储文件,发现内存中存在持续增长且不被回收的String[]类型的数据,后期甚至占据堆内存的85%以上。对系统的代码进行分析发现,原本计划只在应用启动时加载一次的元素为String[]的List,由于程序的疏忽(懒加载未赋值,重复判空),导致随请求数被重复加载,List为static变量,被不断的add数据,却不能被回收,导致其占据大量的堆内存。对程序进行修改后,再重新进行测试,堆内存的占用一直稳定在60M上下,且未发现体积异常未被回收的对象。
- 问题记录---java程序内存溢出
- java 程序内存溢出问题查找
- java 程序内存溢出问题查找
- JAVA程序内存溢出问题的分析
- JAVA程序内存溢出问题的分析
- java 程序内存溢出
- tomcat内存溢出问题记录
- tomcat内存溢出问题记录
- Java内存溢出问题
- java内存溢出问题
- java内存溢出问题
- java内存溢出问题
- java内存溢出问题
- java内存溢出相关问题
- 关于JAVA内存溢出问题
- 有关java内存溢出问题
- Java内存溢出相关问题
- 关于java内存溢出问题
- webkit+各种js交互方法
- 微信小程序开发之选择器 时间选择器 日期选择器 地区选择器
- Android多分辨率适配框架使用指南
- 构建嵌入式Linux系统读书笔记
- 用C语言操作MySQL数据库
- 问题记录---java程序内存溢出
- 关于java定义属性数组的心得
- 株洲新程IT 教育 李赞红老师 第二章 Graphics2D API
- python 常用技巧 1.设置pip国内源 2.打开服务器上的图像界面3.创建linux命令的快捷方式4.中文编码
- jQuery mobile popup函数回调fangfa
- struts2--动态结果集
- FIRST PASSAGE
- spark基础
- Redhat 6.5设置静态IP和动态IP配置文件