【问题标题】:Java : Memory utilization issue (sudden spike observed)Java:内存利用率问题(观察到突然峰值)
【发布时间】:2012-09-07 09:37:33
【问题描述】:

我正在观察我的应用程序/服务的内存利用率。

我正在运行相同的负载,当时我通过 Jconsole 看到内存在 1.5 到 1.7 GB 之间(可以在图像上看到)。突然我注意到内存在几秒钟内变高了,但在这里我想提一下,在用例方面没有任何改变(相同的负载)。

我需要知道内存突然变高的原因。在我的设置中,没有任何改变导致内存变高的原因。

GC 参数有什么错误吗?

您的想法被请求。

我使用的GC参数是:

export GC1_OPTS="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=50 -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+UseAdaptiveGCBoundary" export GC2_OPTS="-XX:+ExplicitGCInvokesConcurrent"

【问题讨论】:

  • 就在峰值之前,您的系统中加载了一个大代码,以确保您的应用程序的原子性。您需要使用一些好的分析工具来找到它。在此之前,请检查这种情况是否仅发生一次或更频繁地发生。
  • 我可以在负载中使用分析(100 次调用)。据我所知,我可以在 1 次调用和 1 次调用中使用分析,一切运行正常。那么如何调试??

标签: java jakarta-ee memory memory-management memory-leaks


【解决方案1】:

你需要知道它在那个时期做了什么。您的负载可能没有改变,但您可能会发现通常使用少量内存的任务碰巧很少使用大量内存。我会在您的应用程序上使用内存分析器来查看内存的使用情况以及导致它的代码。

【讨论】:

  • 我可以在负载测试中使用内存分析器吗?当我每秒运行 100 次调用时,这个问题是可见的。我可以在这个巨大的负载中附加分析器吗?我有疑问。在单个调用中我可以使用它但是我可能不明白原因,因为在一次通话中一切正常。请提供您的想法。
  • 机器上的其他进程也会影响您的应用程序。如果某个其他进程突然使用更多 CPU,您的应用程序可能需要更长的时间来处理其请求,从而产生更多的并发性,从而在此期间消耗更多的内存。你不能指望你的记忆图是完全有规律的。
  • @Frank - 我也添加了 cpu 图。CPU 没有变高。它只有大约 25 % ......但在图中有一个较低的峰值。有什么想法吗???跨度>
  • @VJS CPU 图显然不是同一时间范围内的,但更重要的是,这是 您的 应用程序的 CPU 图,而不是机器的 CPU 图。它本身可能不会明显消耗更多,但由于引入的延迟很小,仍会受到其环境的影响。不过,值得注意的是内存使用量在峰值之后保持不变,因此如果您在峰值之前和之后进行内存转储,您将能够比较并找到占用的差异。此外,不要忘记 GC 是动态的,并且会根据负载自行调整,因此您可能正在目睹这样的变化。
  • @FrankPavageau 我同意这可能是在高一致负载下,您会获得许多小型次要 GC,但是当您减少负载时,GC 会增加年轻代的大小,从而增加最大大小,而您看到使用量的缓慢一致(不是上下)增加,因为清理比较大。
【解决方案2】:

您遗漏了问题的一个重要部分:“问题是什么” 您会看到使用的内存增加了。这可能是您的应用程序代码中以某种方式触发的错误,但从垃圾收集的角度来看,这不是问题。 如果你能产生这个,我会做两个堆转储,一个在 1.7 GB,然后一个在 2.5 GB 堆。 您可以使用 Eclipse MAT 和 delta 模式来比较转储。你会看到你有什么额外的对象。然后你就可以知道是不是问题了。

关于您的 GC 设置,我会去掉“-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled”,因为它们通常会导致很长的暂停时间,而这并不是真正需要的。此外,“-XX:+UseAdaptiveGCBoundary”提出了一个问题,即您使用此参数的动机是什么。我个人不会。

【讨论】:

    猜你喜欢
    • 2013-10-20
    • 2016-02-22
    • 1970-01-01
    • 2019-05-11
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多