我们在Elastic Beanstalk中部署了一个java web应用程序,其中最小实例数为1,最大实例数为2,用于自动扩展。我们使用的自定义AMI是带有Sun JDK 6的c1.medium。
环境状态变为黄色,然后变为红色。从快照日志检入日志文件后,我们发现了一个异常 - 引起:java.lang.OutOfMemoryError:Java堆空间。假设这可能是环境失败的可能原因之一。 我们在Environment Container选项中配置的设置是
初始JVM堆大小(MB) - 256M
最大JVM堆大小(MB) - 512米 Java虚拟机将使用的最大堆大小,使用-Xmx在JVM启动命令行上指定。
最大JVM永久生成大小(MB) - 512m
我应该将堆大小从512米增加到更多还是没问题。
答案 0 :(得分:1)
我认为你的最大JVM永久代大小太大了。这是documentation of AWS:
JVM选项
Java虚拟机中的堆大小会影响对象的数量 在垃圾收集之前在内存中创建 - 一个管理过程 你的应用程序的内存发生了。您可以指定初始堆大小 和最大堆大小。较大的初始堆大小允许更多 在垃圾收集发生之前要创建的对象,但它也是 意味着垃圾收集器将需要更长的时间来压缩堆。 最大堆大小指定JVM的最大内存量 在繁重活动期间扩展堆时可以分配。
在“编辑配置”窗口中,您可以设置初始值和 使用初始JVM堆大小(MB)和最大JVM堆大小 最大JVM堆大小(MB)框。可用内存取决于 Amazon EC2实例类型。有关亚马逊的更多信息 适用于您的AWS Elastic Beanstalk的EC2实例类型 环境,转到Amazon EC2用户中的Instances Families和Types 指南。
永久生成是用于的JVM堆的一部分 存储类定义和关联的元数据。修改大小 永久生成,在Maximum JVM中键入新大小 永久代大小(MB)框
我发现这个Rimuhosting how-to article非常适合解释Xmx设置。