请教一个Serverless 应用引擎问题:sae中jvm堆内存如果不设置的话,系统会默认强制分配70%吗?那假设购买的是6G,然后我们MAX配置的是6G,但实际上在达到4.2G的时候,再申请内存就是OOM了吗?
在 Serverless 应用引擎(SAE)中,JVM 堆内存的默认分配行为与传统的 Java 应用有所不同。SAE 平台为了更好地适应 Serverless 架构的弹性特性和资源管理,采用了一种动态分配的方式来处理堆内存。
具体而言,SAE 平台通过监控应用的内存使用情况,并根据实际需求动态调整堆内存的大小。当应用的内存使用量接近达到 JVM 堆内存的阈值时,SAE 平台会触发一个自动扩容机制,为应用分配更多的内存。这样可以避免因为内存不足而导致的 OutOfMemoryError(OOM)错误。
如果您没有显式地设置 JVM 堆内存大小,SAE 平台会根据应用的资源配置和实际需求进行自动分配。通常情况下,平台会分配一定比例的内存作为 JVM 堆内存,在未达到 JVM 堆内存上限之前,会尽可能满足应用的内存需求。
SAE中JVM堆内存的设置如下:
如果不设置JVM堆内存,SAE默认会分配70%的内存给JVM堆。
如果设置了MAX_MEMORY,SAE就不会有默认内存分配,会按照设置的MAX_MEMORY来。
分配给JVM堆的内存不一定能用完,它只是一个限制值。
当申请的内存超过JVM堆内存时,会触发OOM错误。
根据你的描述,看来你遇到的情况是:
你购买的SAP是6G内存,并设置MAX_MEMORY为6G。
实际运行时,在申请4.2G内存左右就OOM了。
这表明:
SAE没有按照你设置的6G来分配JVM堆。
4.2G就用完内存,所以OOM了。
这可能是由于:
SAE存在bug,没按你配置分配。
你配置的MAX_MEMORY大于购买内存。
其他未知原因。
不会默认配置,需要你自己配置下。是有这个可能的,所以建议配置别太大,百分之70左右,此回答整理自钉群“【3群】Serverless应用引擎(SAE)用户群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。