我们已经在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设置方面相当出色。