2011-09-02 36 views
-1

我们遇到了JVM内存使用率逐渐增加,然后影响CPU性能的问题。它增加了CPU时间。 我们正在尝试利用堆转储来分析问题。但是想了解什么是典型的程序 - 看着gc日志,看着堆转储提供所需的信息。 有什么需要注意的其他事情?分析内存问题

回答

0

下面是我们如何分析这个问题:

  1. 看着我们最近的代码更改识别区改变
  2. 拿了堆转储
  3. 看着线程转储(不是非常有用我们目前的分析)。 Heapdump告诉我们这些内存非常高的对象,这些对象是缓存对象。

但是最近的代码改变有助于我们解释我们目前的情况。其实有趣的是我们增加了一些我们分叉的线程超时。这在内部导致了很多并发性,并且导致内存使用增加,因为一些对象现在可能在GC支持之前保持更长时间。我们的用例支持这种争用的可能性。

总的来说,我可以理解的是堆转储,线程转储和最近的更改 - 所有看起来一起帮助我们理解问题。他们中的任何一个都没有意义。

0

请看堆转储和GC转储,并尝试anaylse,当时当GC达到了顶峰,任何重大的任务是怎么回事。例如 - 当时在你的服务器上的Cron作业等等。

你会得到一个想法,究竟是什么影响你的应用程序。

0

我采用的方法是使用内存配置文件来减少GC之后保留的内存量和丢弃的垃圾量。减少对象丢弃可以提高性能并减少配置文件结果中的噪音。