我有一个在 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/