java.lang.OutOfMemoryError: GC overhead limit exceeded

网上的解决方案:

1、

这种问题两种方法是:增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024m

2、

通过排查问题后得出造成此类问题的原因是,项目的一个模块在批量导入数据,程序需要New一个很大的对象,GC发现内存不够后,对内存进行回收,但是发现回收后的内存还不能满足大对象的需要。应此造成了内存溢出。

解决方案:调大Weblogic的启动内存即可。

这算啥解决?反正我的程序是在一开始运行良好,运行一段时间才出现这种情况。jvm监控截图1如下。仔细想了想觉得应该jvm垃圾回收器,没来的及回收对象导致的,测试如下,在14:50已经程序break,到14:52接近14:53的时候才回收垃圾对象,两分钟才回收啊。


错误代码如下:

      loop: for(; (lastId == null || endId == null) || (lastId / batchSize <= endId / batchSize);){

                /**
                 * 业务逻辑
                 */
                
                List<TestContacter> fetchRecords =null;
                fetchRecords = fabsqlSession.selectList(
                        "com.tuniu.nebula.access.dbsync.fab.queryCompleteData_tf_c_contacter", config);
               
                int affected = nebulaSqlSession.insert(
                            "com.tuniu.nebula.access.dbsync.nebula.saveFetchedData_tb_contacter", fetchRecords);
                    
                // clear(fetchRecords);
            }




### Cause: java.sql.SQLException: java.lang.OutOfMemoryError: GC overhead limit exceeded

; SQL []; java.lang.OutOfMemoryError: GC overhead limit exceeded; nested exception is java.sql.SQLException: java.lang.OutOfMemoryError: GC overhead limit exceeded] with root cause
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:760)
at java.nio.charset.Charset.encode(Charset.java:807)
at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java:2300)
at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java:2282)
at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java:593)
at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java:635)
at com.mysql.jdbc.PreparedStatement$ParseInfo.<init>(PreparedStatement.java:341)
at com.mysql.jdbc.PreparedStatement$ParseInfo.<init>(PreparedStatement.java:175)
at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:836)
at com.mysql.jdbc.JDBC4PreparedStatement.<init>(JDBC4PreparedStatement.java:45)
at sun.reflect.GeneratedConstructorAccessor53.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
at com.mysql.jdbc.PreparedStatement.getInstance(PreparedStatement.java:762)
at com.mysql.jdbc.ConnectionImpl.clientPrepareStatement(ConnectionImpl.java:1455)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4205)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4109)
at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:213)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:72)
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:82)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:54)
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:70)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:44)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:100)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:137)
at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值