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

JVM-XMX限制与进程消耗的内存

拓拔德馨
2023-03-14

关于Java应用程序使用的驻留内存,我有两个问题。

一些背景细节:

  • 我用-xms2560m-xmx2560m设置了一个java应用程序。
  • java应用程序在容器中运行。k8s允许容器最多消耗4GB.
  • 堆:应用程序的工作方式似乎是使用所有内存,然后释放,然后使用等等。

这张快照说明了这一点。Y列是空闲堆内存。(由应用程序通过((double)runtime.getruntime().freememory()/runtime.getruntime().totalmemory())*100)提取)

我还可以使用HotSpotDiagnosticMXBean来确认它,它允许创建一个带有可访问对象的转储和一个还包括不可访问对象的转储。

第一个问题:

这是合理的行为还是表明内存使用问题?看起来不像是典型的泄密。

第二个问题

不确定这是否能在XMX和4GB的k8s限制之间占到1-1.5GB。

如果你要提供某种检查表来接近问题,会是什么?(感觉我看不到森林,看不到树木)

有什么免费工具能帮上忙吗?(除了用于分析内存转储的那些)

共有1个答案

秦毅
2023-03-14

您为堆分配2.5GB,JVM本身和OS组件也将占用一些内存(这里的重击规则是1GB,但实际数字可能会有很大不同,尤其是在容器中运行时),因此我们已经占用了3.5GB。

从Java8开始,JVM将不再将类的代码存储在堆中,而是存储在一个称为“元空间”的区域中;根据您的程序在做什么,使用了多少类和多少类加载器,这个区域可能会很容易地增长到0.5GB以上。除了链接帖子中提到的那些东西之外,这一点还需要考虑。

 类似资料:
  • 我正在docker中运行一个java进程。我已经设置了xms(388m)和xmx(388m)。在应用程序启动后的某个时候,容器的内存消耗超过并达到了大部分~主机内存大小,容器被杀死。 < li >当我使用jprofiler连接到java进程时,我看到堆小于Xmx < li >但是,容器内顶部的命令显示< code>docker stats显示的内容 < li >当我在主机上运行相同的java进程时

  • 我有一个很小的java控制台应用程序,我想在内存使用方面进行优化。它是在Xmx设置为仅64MB的情况下运行的。根据不同的监视工具(htop、ps、pmap、Dynatrace)显示进程的总体内存使用量超过250MB。我主要在Ubuntu18上运行它(也在其他操作系统上测试)。 我使用了-xx:nativeMemoryTracking,java param和jcmd的本地内存跟踪,以找出为什么在堆之

  • 问题内容: 我想开始我与JVM OPTS应用:。当应用程序启动时,我通过键入来检查内存使用情况,发现vmsize超过600512 kB!比我的设置大得多。我想知道如何限制进程的jvm内存使用量。 问题答案: 您无法控制要控制的内容 ,只能控制Java Heap,它不能控制JVM 对 本机内存 的使用,JVM的使用根据实现而完全不同。 从下面的文章中感谢内存(了解JVM如何在Windows和Linu

  • 与这两个问题相关的是: null Java Buildpack自动为和设置sane值。通过调优参数和配置预期线程的(最大)数量,我非常确定Java进程消耗的内存应该小于我分配给云铸造应用程序的上限。 但是,我仍然会遇到Cloud Foundry“内存不足”错误(不是Java OOM错误!): 我尝试了设置。将该值设置为1或2会导致启动缓慢。在的情况下,我仍然看到了上面描述的错误,所以这不是我的问题

  • 是否可以限制会话和与之相关的请求可以使用的内存量? 例如,我希望将每个用户会话限制为一兆字节。此限制应适用于处理请求时创建的任何对象。有可能吗?