java.lang.OutOfMemoryError GCOverhead Limit Exceeded 错误

标签 java spring tomcat garbage-collection

我有一个在 AWS C4.Large(4 Gb 内存)和 Apache Tomcat 8 上运行的 java spring 应用程序。在服务器启动期间实例化 30000 条记录的 bean 时出现 java.lang.OutOfMemoryError GCOverhead Limit Exceeded Error。

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.String]: Factory method 'loadBeanMaps' 抛出异常;嵌套异常是 java.lang.OutOfMemoryError: GC overhead limit exceeded

但是我的 free -m 输出,

缓存的已用空闲共享缓冲区总数 内存:3765 1706 2059 0 29 446 -/+ 缓冲区/缓存:1230 2534 交换:0 0 0

想知道如何查看设置的限制?它是基于服务器容量的百分比吗?因为当我将我的服务器更改为 m4.large(8 Gb 内存服务器)时,我没有收到此错误。如何查看这个限制?以及如何处理这个错误?

最佳答案

您必须检查您的进程的 JVM 选项

使用以下命令获取所有正在运行的 Java 进程的详细信息

jps -mlvV

jps自带Jdk安装,应该在jdk/bin

这将为您提供如下输出

10780  -Dosgi.requiredJavaVersion=1.7 -Xms40m -XX:MaxPermSize=256m -Xverify:none -Dorg.eclipse.swt.browser.IEVersion=10001 -Xmx1200m -javaagent:lombok.jar -Dfile.encoding=UTF-8

确定您的 Java 应用程序的进程并查看 Xmx 参数中的值

关于java.lang.OutOfMemoryError GCOverhead Limit Exceeded 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977718/

相关文章:

java - 序列化 ECJ GP individual 以供以后执行

java - JBoss 日志记录 - 记录依赖项项目

spring - 从 Spring Listener 方法激活的 JavaFX 进度条组件

java - 在 Controller 内创建的 header 的单元测试

java - Maven 项目中重复的 context.xml

tomcat - 通过 Tomcat Context LifecycleListener 在 WEB-INF/classes 中加载类

java - Java中如何获取更新时间?

java - 使用 Jsoup 获取元标记值

java - @Scheduled 没有具体日期

java - 在 GlassFish Server Open Source Edition 3.1.2 中管理共享库