java.lang.OutOfMemoryError: GC overhead limit exceeded

来源:互联网 发布:迅雷手游网络加速器 编辑:程序博客网 时间:2024/05/16 09:05

网上的解决方案:

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
原创粉丝点击