分析内存问题

时间:2011-09-02 10:28:31

标签: java memory

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

4 个答案:

答案 0 :(得分:2)

您可能会发现这篇文章很有用。

http://java.dzone.com/news/how-fix-memory-leaks-java

答案 1 :(得分:0)

请查看堆转储和GC转储,并尝试分析当GC达到峰值时,任何主要任务都在进行。例如 - 当时在您的服务器上进行的Cron作业等。

您将了解究竟对您的应用产生什么影响。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

以下是我们分析问题的方法:

  1. 我们查看了最近的代码更改,以确定更改的区域
  2. 采取了堆转帐
  3. 查看了线程转储。(对我们当前的分析不是很有用)。 Heapdump告诉我们内存非常高的对象类型,这些是缓存对象。
  4. 但是最近的代码更改有助于我们解释当前的情况。实际上有趣的是,我们为一些我们分叉的线程增加了超时。这在内部引起了大量并发,结果是增加了内存使用量,因为某些对象现在可以在GC之前保持更长时间。我们的用例支持这种争用的可能性。

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