2011-09-02 35 views
-1

我們遇到了JVM內存使用率逐漸增加,然後影響CPU性能的問題。它增加了CPU時間。 我們正在嘗試利用堆轉儲來分析問題。但是想了解什麼是典型的程序 - 看着gc日誌,看着堆轉儲提供所需的信息。 有什麼需要注意的其他事情?分析內存問題

回答

0

下面是我們如何分析這個問題:

  1. 看着我們最近的代碼更改識別區改變
  2. 拿了堆轉儲
  3. 看着線程轉儲(不是非常有用我們目前的分析)。 Heapdump告訴我們這些內存非常高的對象,這些對象是緩存對象。

但是最近的代碼改變有助於我們解釋我們目前的情況。其實有趣的是我們增加了一些我們分叉的線程超時。這在內部導致了很多併發性,並且導致內存使用增加,因爲一些對象現在可能在GC支持之前保持更長時間。我們的用例支持這種爭用的可能性。

總的來說,我可以理解的是堆轉儲,線程轉儲和最近的更改 - 所有看起來一起幫助我們理解問題。他們中的任何一個都沒有意義。

0

請看堆轉儲和GC轉儲,並嘗試anaylse,當時當GC達到了頂峯,任何重大的任務是怎麼回事。例如 - 當時在你的服務器上的Cron作業等等。

你會得到一個想法,究竟是什麼影響你的應用程序。

0

我採用的方法是使用內存配置文件來減少GC之後保留的內存量和丟棄的垃圾量。減少對象丟棄可以提高性能並減少配置文件結果中的噪音。