2014-12-07 58 views
1

我知道又該gc.logs被認爲像又該gc.logs檢查

  • 很多事情你應該檢查的頻率「全GC」運行,如果頻繁運行,那麼它是問題跡象
  • 您還應該檢查「Full GC」在完成時能夠回收多少內存,如果它不多,則會再次出現問題,因爲它會強制「Full GC」再次運行
  • 如果「Full GC」頻繁運行,您應該重新訪問爲java進程分配的堆空間。

這些都是我工作的一些觀點,當我看着gc日誌的時候,我會很想知道還有什麼要注意的。

僅供參考,我已經通過以下線程了....

回答

2

首先,你需要知道什麼是錯的CAN GC做你的程序。取決於您使用的GC日誌中的收集器類型和舊版本的內容可能有所不同。但是,我們需要從gc日誌中獲得的所有基線推斷大部分集中在以下幾點:

  • 次要收集需要多長時間?
  • 主要收藏品收藏多久?
  • 次要收集的頻率是多少?
  • 主要收藏的頻率是多少?
  • 少量收集回收多少錢?
  • 主要收集品回收多少?上述

大多數計劃

  • 組合有權利要求堆的約90-95%,其餘傳遞到Survivor空間非常頻繁的未成年人集合。隨後的收藏品再次清理了大約80%的倖存者,實質上只有2%至4%的實際次要收藏使其成爲老式的,並且無論您使用哪個收藏家,這種循環都會持續進行。

    現在,疼痛領域是每個應用程序請求或線程有數百個小尺寸次要集合,並且當它們相加時,它們會在兩位數秒內完成相當長的時間。由於在現代收藏家中,小傳和橫掃並不能阻止世界的情況,所以這是可以忍受的。隨着老一代收集者運行時出現問題,但不回收任何重大問題。例如:通常收集器運行時,舊的大約80-85%已滿。這可能是一個停止世界插曲,因爲新的數據不能保存在堆上,除非堆有更多的空間,這可能就是這種情況。所以應用程序線程暫停,讓GC線程首先清理空間。但是一旦收集器完成,堆填充率不會像應該那樣下降。一個好的尺寸應該會減少你的堆超過40%在一次去。如果這不意味着你需要更多的堆來保存你的長壽命物體。

    因此,本質上GC分析不是「基於一組預定義步驟」的事情。它更多的是hti和試用分析。更多的實驗是您設置初始大小和設置,然後記錄或監測GC活動並記錄結果。然後說8-10運行後,你比較筆記,看看什麼適用於你的應用程序,什麼不適用。這是一項非常有趣的工作。