應(yīng)用GC長(zhǎng)時(shí)間停頓分析

早上被報(bào)警叫醒,使用gceasy.io分析了服務(wù)器的gc日志,報(bào)告見:2017-05-28 gc.log報(bào)告

這份報(bào)告里明確得指出了應(yīng)用的問題,即在2017.2.28 07:09左右發(fā)生了長(zhǎng)時(shí)間的GC停頓,入下圖所示:


gc報(bào)告問題
  1. 點(diǎn)擊進(jìn)入reduce long GC pause,這篇文章列舉了幾個(gè)可能引起長(zhǎng)時(shí)間GC停頓的原因:
  • 高速的對(duì)象創(chuàng)建速率,報(bào)告顯示我的應(yīng)用沒問題
  • Heap區(qū)域,年輕代較??;jdk 1.8只配置了Xmx和Xms相同大小,2048,沒有指定-Xmn或-XX:NewRatio,可能有影響;
  • GC算法選擇問題,我使用G1回收器:G1回收器適合高并發(fā)場(chǎng)景,應(yīng)該沒問題
  • Process Swapping,進(jìn)程內(nèi)存置換
  • 較少的GC線程
  • 后臺(tái)IO阻塞,根據(jù)系統(tǒng)監(jiān)控發(fā)現(xiàn)在同一時(shí)間IO延時(shí)、占用CPU都飆高,懷疑是這個(gè)問題。
  1. 點(diǎn)擊進(jìn)入fix this problem,這篇文章首先介紹了user-time、system-time和real-time的區(qū)別,由于多線程進(jìn)行GC過程,因此在正常情況下,real-time應(yīng)該小于user-time + system-time(例如:如果user-time + system-time為2秒,而有5個(gè)線程在執(zhí)行GC算法,那么real-time應(yīng)該為400毫秒)。但是在一些特定場(chǎng)景下會(huì)出現(xiàn)real-time大于user-time + system-time之和,如果在GC日志中出現(xiàn)多個(gè)這樣的情況,原因可能是:IO飆高;CPU資源耗盡。

綜上分析,可能是JVM參數(shù)或io問題引起的GC長(zhǎng)時(shí)間停頓,IO問題可能性更高。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容