[英]Is setting JVM Xmx option in Google App Engine Standard useful?
我有一个简单的 Spring 启动应用程序,在 Google App Engine 标准 Java 11 个环境 F2 实例上运行。 但是,我偶尔会遇到以下错误:
在服务 18320 个请求后,超过了 512 MB 和 592 MB 的软 memory 限制。 考虑在 app.yaml 中设置更大的实例 class。
与其升级到更大的实例类型,我更愿意限制 memory 的使用,即使它会稍微降低性能。
由于 F2 实例有 512MB 的可用 memory,将 JVM 的 -Xmx 选项设置为 480MB 这样的值会有所帮助吗? 或者通过将 Google 的“超出软 memory 限制”警告转换为全面的 OutOfMemory 错误是否会使事情变得更糟?
谢谢
您可以限制 jvm 正在使用的 memory 的数量,但没有通用的“推荐” arguments / 设置。 可能对一个应用程序或用例有利的设置对另一个应用程序或用例可能很糟糕。作为一般规则,根本没有 JVM 设置是一个很好的起点。
当您遇到 Exceeded soft private memory 限制错误时,您有两种选择:
您可以使用更多memory将您的实例升级到另一个
您可以减少在每个请求中处理的数据块,将 XML 文件处理成更小的部分,并让较小的实例继续工作。
这是一个可以提供帮助的stackoverflow帖子。
Java 进程可以消耗比通过 -Xmx 指定的更多的 memory。 这仅适用于最大堆大小。 因此,如果您想限制它,您应该指定显着小于 512 MB。 还有其他标志可以限制非堆 memory 的某些部分,例如-XX:MaxDirectMemorySize
。
默认情况下,可用 RAM 的 1/4 分配为 Xmx。 您应该检查您的应用程序运行的实际设置是什么,也许通过java -XX:+PrintFlagsFinal
。
I suggest reading this excellent post by a JVM expert explaining various types of JVM memory: Java using much more memory than heap size (or size correctly Docker memory limit)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.