【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM

问题描述

在Azure的Spring Cloud服务 (官名为:Spring Apps)中,在Metrics 页面中查看 App Memory Usage 和 jvm.memory.use,发现两则在下图中出现巨大差距。

  • App Memory Usage还是在逐渐上升
  • jvm.memory.use 却断崖式下降 

 在App Memory Usage在逐渐上涨的情况下,是否会最终出现OOM(out of memory,内存溢出)呢?

 

问题解答

首先,说明 App Memory Usage和jvm.memory.use的区别:

==>  App Memory Usage: 这个指标是用于监视应用程序实际使用的内存量,包括Java虚拟机(JVM)使用的内存,以及应用程序使用的非堆内存,例如堆外内存。

==>  jvm.memory.use: 这个指标是用于监视JVM在运行过程中使用的内存量。这包括堆内存使用情况(例如Eden、Survivor和Old Generation等堆空间),以及非堆内存使用情况(例如Metaspace)

简单来说就是App Memory Usage是关注整个应用程序使用的内存,包括JVM使用的内存和应用程序使用的非堆内存,而jvm.memory.use只关注JVM使用的内存。

 

其次,对图中指标进行解释:

==>  JVM.Memory.Used 出现断崖式下降的情况,GC是可以将其中的non-indexed objects给回收掉

==>  App memory usage 为 spring cloud 应用对应的底层AKS POD层面指标,表示当前分配给Java进程的内存。GC是不会影响POD level指标的情况的,且在POD分配给Java进程后,如果OS level不需要该部分内存用作它用是暂时不会收回的。

 

最后,是否会发生OOM?

==>  对于OOM,分为JVM OOM和容器OOM,JVM层面参考jvm.memory.used 指标,容器OOM考虑App memory Usage。GC仅对堆内即jvm.memory.used生效。

==>  App memory usage很高也可能不发生容器OOM,仅当需要使用到对外内存或者当前JVM占用了所有的App Memory Usage时还需要分配另外的内存,才会发生容器级别OOM

 

参考资料

Azure Spring Apps 是什么?https://docs.azure.cn/zh-cn/spring-apps/overview

 

posted @   路边两盏灯  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-04-20 【Azure Developer】使用 CURL 获取 Key Vault 中 Secrets 中的值
2021-04-20 【Azure 应用服务】App Service 默认开放端口说明, 如何禁用Web app的端口号? 
点击右上角即可分享
微信分享提示