【问题标题】:Process Memory Vs Heap -- JVM进程内存与堆——JVM
【发布时间】:2011-06-21 01:28:07
【问题描述】:

我们在 tomcat 服务器上部署了一个 Web 应用程序。我们运行某些预定的作业,之后堆内存达到峰值并稳定下来,一切似乎都很好。 然而,系统管理员抱怨内存使用量(Linux 上的“顶部”)随着计划作业的增加而不断增加。 CPU的堆内存和内存之间有什么共同关系?它可以由任何 JVM 设置控制吗?我使用 JConsole 来监控系统。
我通过 JConsole 强制进行垃圾收集,堆使用量下降了,但是 Linux 上的内存使用量仍然很高,并且从未减少。

有什么想法或建议会有很大帮助吗?

【问题讨论】:

  • 服务器显然是 64 位服务器。
  • 你知道服务器运行的是什么JVM,强制垃圾回收后堆内存使用和实际内存使用有什么区别吗?
  • >>然而,Linux 上的内存使用率仍然很高,而且从未减少。

标签: java linux tomcat


【解决方案1】:

JVM进程分配的内存和堆大小不一样。使用的堆大小可能会下降,而 JVM 分配的空间不会实际减少。 JVM 必须接收一个触发器,指示它应该缩小堆大小。正如@Xepoch 提到的,这是由-XX:MaxHeapFreeRatio 控制的。

但是,系统管理员抱怨内存使用量(Linux 上的“top”)随着计划作业 [run] 的增多而不断增加。

那是因为你很可能有某种内存泄漏。当系统管理员看到进程慢慢占用越来越多的空间时,他们往往会抱怨。

有什么想法或建议会有很大帮助吗?

你看过线程数吗?您的应用程序是否创建了自己的线程并将它们发送到死锁并永远空闲等待? 您是否与任何可能使用 JNI 的第三方 API 集成?

【讨论】:

    【解决方案2】:

    可能观察到的是 Java 进程的虚拟大小而不是驻留集大小?如果您的目标是占用空间小,您可能希望在 JVM 堆参数中包含 -Xms 或任何最小大小,并将 70% -XX:MaxHeapFreeRatio= 调整为较小的数字以允许更激进的堆收缩。

    同时,请提供更多关于 Linux 内存从未减少的评论所观察到的细节?什么指标?

    【讨论】:

    • 使用 'top' 命令时,%MEM 仍然很高,但随着更多作业的调度继续上升,%CPU 下降,堆看起来还不错。
    • %MEM 是 RES 与主内存成比例的百分比,因此通常报告主内存中的常驻大小。 -Xms-Xmx 选项是什么?还要计算 RES/VIRT 百分比和 RES/SHR 百分比并报告回来。它可能报告很高,但进程可能有很大一部分共享。
    • 我假设 SHR 以千字节为单位,这就是它的显示方式。 RES/VIRT = 56% 和 RES/SHR = 117.79 这是带有“M”选项的最高输出。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14425 root 17 0 1990m 1.1g 9792 S 0.0 54.5 23:01.62 java 这是在我对你建议的 -XX:MaxHeapFreeRatio 进行更改之后,它的表现似乎稍微好一些,我仍在运行一些测试。我注意到在运行作业时 CPU% 超过 100%...
    • 这意味着实际上只有不到一半的内存位于主内存中,其余的要么未使用,要么被分页。如果 CPU 足够(你说它是)并且考虑到 GC 遍历大部分堆的性质,我敢打赌你真的只使用了那 % 的分配。不到 1% 的分享在这里可以忽略不计。
    • @user546352 - 对于多进程和线程应用程序,超过 100%CPU(%CPU 确实是一个糟糕的指标)是完全正常的(请查看您的平均负载)。您将 maxheapfreeratio 设置为什么?
    【解决方案3】:

    您可以使用 -Xmx 和 -Xms 设置来调整堆的大小。使用tomcat可以在启动前设置环境变量:

    export JAVA_OPTS=”-Xms256m -Xmx512m”
    

    这最初会创建一个 256MB 的堆,最大大小为 512MB。

    更多细节: http://confluence.atlassian.com/display/CONF25/Fix+'Out+of+Memory'+errors+by+increasing+available+memory

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2017-02-08
      • 2021-03-29
      • 2020-10-19
      • 2012-02-27
      • 2016-05-31
      • 2017-04-23
      • 2016-06-12
      • 2021-11-17
      相关资源
      最近更新 更多