0

我们在 Elastic Beanstalk 中部署了一个 Java Web 应用程序,其最小实例数为 1,最大实例数为 2,用于 Autoscaling。我们使用的自定义 AMI 是带有 Sun JDK 6 的 c1.medium。

环境状态变为黄色,然后变为红色。从快照日志中检查日志文件后,我们发现了一个异常 - 原因:java.lang.OutOfMemoryError: Java heap space。假设这可能是环境失败的可能原因之一。我们在 Environment Container 选项中配置的设置是

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

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

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

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

4

1 回答 1

1

我认为您的最大 JVM Permanent Generation Size 太大了。这是AWS 的文档

JVM 选项

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

在 Edit Configuration 窗口中,您可以使用 Initial JVM Heap Size (MB) 和 Maximum JVM Heap Size (MB) 框设置初始和最大 JVM 堆大小。可用内存取决于 Amazon EC2 实例类型。有关适用于您的 AWS Elastic Beanstalk 环境的 Amazon EC2 实例类型的更多信息,请转到 Amazon EC2 用户指南中的实例系列和类型。

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

我发现这篇Rimuhosting how-to 文章在解释 Xmx 设置方面非常好。

于 2012-06-23T09:12:32.950 回答