mybatis拼接sql导致的oom报错 GC报错

报错1:mybatis拼接过多

java 复制代码
java.lang.OutOfMemoryError: GC overhead limit exceeded

具体报错:

java 复制代码
nested exception is org.apache.ibatis.builder.BuilderException:
Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'.
Cause: org.apache.ibatis.ognl.OgnlException: 
sqlSegment [java.lang.OutOfMemoryError: GC overhead limit exceeded

一看报错内容,有builder,expression,sqlSegment,ognl,就可以推测出,应该是mybatis拼接条件太多,导致内存超了。例如条件in里,code太多,或者id太多。

oracle官方对 java.lang.OutOfMemoryError: GC overhead limit exceeded 解释如下:

java 复制代码
Exception in thread thread_name: 
java.lang.OutOfMemoryError: GC Overhead limit exceeded Cause: 
The detail message "GC overhead limit exceeded" indicates that 
the garbage collector is running all the time 
and Java program is making very slow progress. 
After a garbage collection, 
if the Java process is spending more than approximately 98% of its time doing garbage collection 
and if it is recovering less than 2% of the heap 
and has been doing so far the last 5 (compile time constant) consecutive garbage collections, 
then a java.lang.OutOfMemoryError is thrown. 
This exception is typically thrown 
because the amount of live data barely fits into the Java heap having little free space for new allocations.
 
Action: Increase the heap size. 
The java.lang.OutOfMemoryError exception for GC Overhead limit exceeded can be turned off with the command line flag -XX:-UseGCOverheadLimit.

大致意思是说:

频繁的进行内存回收(最起码已经进行了5次连续的垃圾回收),JVM就会曝出java.lang.OutOfMemoryError: GC overhead limit exceeded错误。

解决的办法是:

增加堆大小,启动脚本添加参数-Xmx1024m。

或者 关闭GC Overhead limit:-XX:-UseGCOverheadLimit

但由于这是代码本身引起,而非内存不够的问题。所以不建议去改动堆参数或者关闭GC上限。

具体参考

BuilderException OgnlException sqlSegment nonEmptyOfWher OutOfMemoryError:GC overhead limit exceeded_globalcoding的博客-CSDN博客

报错2:

占位符

===================分割线=======================

文章到此已经结束,以下是紫薯补丁

java.lang.OutOfMemoryError: GC overhead limit exceeded

nested exception is org.apache.ibatis.builder.BuilderException:

Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'.

Cause: org.apache.ibatis.ognl.OgnlException:

sqlSegment [java.lang.OutOfMemoryError: GC overhead limit exceeded

Exception in thread thread_name:

java.lang.OutOfMemoryError: GC Overhead limit exceeded Cause:

The detail message "GC overhead limit exceeded" indicates that

the garbage collector is running all the time

and Java program is making very slow progress.

After a garbage collection,

if the Java process is spending more than approximately 98% of its time doing garbage collection

and if it is recovering less than 2% of the heap

and has been doing so far the last 5 (compile time constant) consecutive garbage collections,

then a java.lang.OutOfMemoryError is thrown.

This exception is typically thrown

because the amount of live data barely fits into the Java heap having little free space for new allocations.

Action: Increase the heap size.

The java.lang.OutOfMemoryError exception for GC Overhead limit exceeded can be turned off with the command line flag -XX:-UseGCOverheadLimit.

相关推荐
それども4 小时前
Mybatis xml 执行提示 NoSuchPropertyException
xml·mybatis
qq_366086225 小时前
MyBatis 动态 SQL 高频性能优化方案
sql·性能优化·mybatis
aygh6 小时前
互联网大厂Java面试场景:技术问答实录
mybatis·springboot·多线程·hashmap·java面试·arraylist·技术总结
独断万古他化6 小时前
【Java 实战项目】多用户网页版聊天室:项目总览与用户 & 好友管理模块实现
java·spring boot·后端·websocket·mybatis
tsyjjOvO6 小时前
SpringBoot 整合 MyBatis
java·spring boot·mybatis
StackNoOverflow8 小时前
Spring Boot 整合 MyBatis + 自动配置原理详解
spring boot·后端·mybatis
bearpping8 小时前
idea、mybatis报错Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
tomcat·intellij-idea·mybatis
weixin_704266059 小时前
Spring Boot (整合 Mybatis + 自动配置原理)
spring boot·笔记·mybatis
小旭95279 小时前
SpringBoot 整合 MyBatis 与自动配置原理详解
java·spring boot·后端·spring·intellij-idea·mybatis
弹简特1 天前
【JavaEE】Mybatis实现分页查询功能
java·java-ee·mybatis