我们已经在Elastic Beanstalk中部署了一个Java Web应用程序,其最小实例数为1,最大实例数为2,可以进行自动缩放。我们正在使用的定制AMI是带有Sun JDK 6的c1.medium。

环境状态更改为黄色,然后变为红色。从快照日志中检入日志文件后,我们发现了一个异常-由以下原因引起:java.lang.OutOfMemoryError:Java堆空间。假定这可能是环境故障的可能原因之一。
我们在“环境容器”选项中配置的设置是

初始JVM堆大小(MB)-256M

最大JVM堆大小(MB)-512m
Java虚拟机将消耗的最大堆大小,在JVM启动命令行上使用-Xmx指定。

最大JVM永久生成大小(MB)-512m

我应该将堆大小从512m增加到更多还是可以。

最佳答案

我认为您的最大JVM永久代大小太大。这是documentation of AWS


JVM选项

Java虚拟机中的堆大小会影响可以对象的数量
在垃圾回收之前在内存中创建的一个管理过程
您的应用程序的内存出现。您可以指定初始堆大小
和最大堆大小。较大的初始堆大小允许更多
垃圾收集发生之前要创建的对象,但是
意味着垃圾收集器将花费更长的时间来压缩堆。
最大堆大小指定JVM的最大内存量
在繁重的活动期间扩展堆时可以分配。

在“编辑配置”窗口中,您可以设置初始名称和
使用初始JVM堆大小(MB)和最大JVM堆大小
最大JVM堆大小(MB)框。可用内存取决于
Amazon EC2实例类型。有关亚马逊的更多信息
适用于您的AWS Elastic Beanstalk的EC2实例类型
环境,请转到Amazon EC2用户中的实例系列和类型
指南。

永久生成是JVM堆的一部分,用于
存储类定义和关联的元数据。修改大小
在永久代中,在“最大JVM”中键入新大小
永久世代大小(MB)框


我发现此Rimuhosting how-to article在解释Xmx设置方面相当出色。

09-10 03:38
查看更多