我們有一個基於Web Java的應用程序,運行在JBoss上,允許的最大堆大小約爲1.2 GB(總計機器物理內存爲2 GB)。在某些時候,應用程序停止響應(對客戶端)幾分鐘。經過一番分析後,我們發現罪魁禍首是Full GC。下面是詳細GC日誌的摘錄:完整的GC實時時間遠大於用戶的系統時間
74477.402:[全GC [PSYoungGen:3648K-> 0K(332160K)] [PSOldGen:778476K-> 589497K(819200K)782124K-> 589497K(1151360K)[PSPermGen: 102671K-> 102671K(171328K)],646.1546860秒] [時報:用戶= 3.84 SYS = 3.72,實際= 646.17秒]
什麼我不明白是怎麼回事可能是實時在Full GC上花費大約11分鐘(646秒),而用戶+系統時間僅爲7.5秒。 7.5秒的聲音給我更多合理的時間來清理<從老一代200 MB。其他時間去哪裏?
非常感謝。
另一種方法可能是減少長壽命對象,因爲短壽命對象的回收速度會快得多。例如,對象池是Java中的一個不好的練習。 – 2010-06-15 13:40:11
是的。我專注於OP可以快速解決問題的事情。 – 2010-06-15 13:46:59
您確定嗎?我期望一個JVM進程等待一個頁面在sys =中花費時間。 – eckes 2012-05-02 16:55:43