开发者社区 > 云原生 > Serverless > 正文

请教一个Serverless 应用引擎问题:sae中jvm堆内存如果不设置的话,系统会默认强制分配?

请教一个Serverless 应用引擎问题:sae中jvm堆内存如果不设置的话,系统会默认强制分配70%吗?那假设购买的是6G,然后我们MAX配置的是6G,但实际上在达到4.2G的时候,再申请内存就是OOM了吗?

展开
收起
cuicuicuic 2023-07-16 18:44:35 49 0
3 条回答
写回答
取消 提交回答
  • 在 Serverless 应用引擎(SAE)中,JVM 堆内存的默认分配行为与传统的 Java 应用有所不同。SAE 平台为了更好地适应 Serverless 架构的弹性特性和资源管理,采用了一种动态分配的方式来处理堆内存。

    具体而言,SAE 平台通过监控应用的内存使用情况,并根据实际需求动态调整堆内存的大小。当应用的内存使用量接近达到 JVM 堆内存的阈值时,SAE 平台会触发一个自动扩容机制,为应用分配更多的内存。这样可以避免因为内存不足而导致的 OutOfMemoryError(OOM)错误。

    如果您没有显式地设置 JVM 堆内存大小,SAE 平台会根据应用的资源配置和实际需求进行自动分配。通常情况下,平台会分配一定比例的内存作为 JVM 堆内存,在未达到 JVM 堆内存上限之前,会尽可能满足应用的内存需求。

    2023-07-23 09:24:21
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    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大于购买内存。

    其他未知原因。

    2023-07-22 16:07:08
    赞同 展开评论 打赏
  • 不会默认配置,需要你自己配置下。是有这个可能的,所以建议配置别太大,百分之70左右,此回答整理自钉群“【3群】Serverless应用引擎(SAE)用户群”

    2023-07-16 19:01:38
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • Serverless 应用引擎
  • 相关电子书

    更多
    JVM实战 立即下载
    JVM的GC 立即下载
    基于JVM的脚本语言开发、运用实践 立即下载