当前位置: 首页 > 知识库问答 >
问题:

如果java堆内存限制与kubernetes中的pod资源限制不同会发生什么?

杜辉
2023-03-14

我在一个吊舱内运行一个Spring靴,配置如下。

吊舱限制:

resources:
    limits:
      cpu: "1"
      memory: 2500Mi
    requests:
      cpu: "1"
      memory: 2500Mi

命令参数:

spec:
containers:
- args:
  - -c
  - ln -sf /dev/stdout /var/log/access.log;java -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false -Djava.security.egd=file:/dev/./urandom
    -Xms1600m -Xmx1600m -XX:NewSize=420m -XX............
  1. 如果java进程达到其最大堆限制(即1600m(Xmx1600m))会发生什么
  2. 如果Xmx对pod内的java进程没有影响,它可以上升到pod限制右(即内存:限制部分的2500Mi)
  3. 如果上面的配置是正确的,那么我们就是在浪费900Mi的内存权(2500-1600=900)

共有3个答案

董飞航
2023-03-14

如果在docker中运行JVM,而不是手动设置-Xmx、Xms选项,最好使用-XX:UnlockExperimentalVMOptions-XX:usecgroupmemorymitforheap告诉JVM遵守容器的限制。

有关详细信息,请参阅https://hub.docker.com/_/openjdk/使JVM尊重CPU和RAM限制。

程和畅
2023-03-14

如果java进程已达到其最大堆限制,则如果jvm在GC之后无法重新获得堆内存,则jvm将抛出内存错误。在这种情况下,pod将运行,但java进程出错。

xmx对POD中的jvm堆有影响,jvm堆不能超过这个值。在您的情况下,jvm堆可能会增加,因为pod的内存相对较高。

倪棋
2023-03-14

Xmx标志仅控制Java堆内存,这是运行代码时您自己的Java对象可用的空间。如果用完了,JVM将进行垃圾收集以腾出空间。如果仍然用完,则会引发OutOfMemoryException。

Java JVM还在内部使用大量其他内存来加载类、JIT编译等。。。因此,您需要在Kubernetes中允许比-Xmx值更多的内存。如果超过了Kubernetes限制值,那么Java可能会崩溃。

您在上面发布的配置看起来不错。通常我在无限制地运行一段时间后通过查看库伯内特斯内存使用图表来找到这些值。

 类似资料:
  • 我为kubernetes api服务器上的POD创建了如下限制 如果我理解正确,如果pod在创建pod时超出了用户定义的资源限制,kubernetes会拒绝pod。所以,我尝试创建一个新的pod,它通过了资源限制,然后我尝试消耗资源达到最大限制资源,但它对pod没有任何影响。LimitsRange和ResourceQuota插件是否包含在本案例中?如果没有,我如何在创建资源吊舱后限制资源吊舱?

  • 浏览器安全的基石是“同源政策”(same-origin policy)。很多开发者都知道这一点,但了解得不全面。 概述 含义 1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。 最初,它的含义是指,A 网页设置的 Cookie,B 网页不能打开,除非这两个网页“同源”。所谓“同源”指的是“三个相同”。 协议相同 域名相同 端口相同 举例来说,http://w

  • 在java中,您有最小堆空间(-Xms)和最大堆空间(-Xmx)。最小堆空间从一开始就分配给JVM,“最大堆空间”是JVM到达它时会说“超出堆空间”的限制。 Openshift/Kubernetes中的pod是否有如此不同的值(初始值和限制值),或者由于某种原因,初始内存分配总是等于限制值?

  • 我正在尝试在 kubernetes 集群中运行Spring批处理应用程序。我能够通过在部署 yaml 中放置以下代码段来强制对主应用程序 Pod 进行资源限制: 这些设置正在应用,可以在pod yaml(kubectl编辑pod批处理)中看到。 但是,这些限制不会传播到工作pod。我尝试在批处理的configmap中添加以下属性来设置cpu和内存限制: 然而,工人舱没有达到这些限制。我也尝试提供以

  • 本文向大家介绍为什么要有同源限制?相关面试题,主要包含被问及为什么要有同源限制?时的应答技巧和注意事项,需要的朋友参考一下 我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。 缺点: 现在网站的JS 都会进行压缩,一些文件用了

  • 问题内容: v8对单个对象的堆分配有限制吗? 在节点命令行上失败 另外,以脚本运行时失败并显示相同的错误 最后输出: 然而, 很好 编辑: 编辑2:即使这有效!v8的限制似乎适用于对象可以具有的属性数量? 另外,我发现了这个:https : //github.com/v8/v8/blob/master/src/objects.h#L2928 我想知道这是否相关。 问题答案: 事实证明,对字符串,对