我們有一個對延遲敏感的應用程序,並且遇到了一些我們不完全瞭解的與GC有關的暫停。我們偶爾會有一個小的GC,導致應用程序暫停時間比報告的GC時間本身長得多。下面是一個例子日誌片段:什麼會導致較小的GC時間和總暫停時間之間的較大差異?
485377.257:[GC 485378.857:[ParNew:105845K-> 621K(118016K),0.0028070秒] 136492K-> 31374K(1035520K)0.0028720秒] [時間:用戶= 0.01 SYS = 0.00,實際= 1.61秒]
針對應用程序的線程被停止的總時間:1.6032830秒
這裏的總停留時間是數量級比報道的GC時間。這些是孤立的和偶然的事件:緊接着的前面和後面的次要GC事件不顯示這種大的差異。
該進程運行在專用機器上,擁有大量可用內存,8個內核,運行內核爲2.6.9-89.0.1EL-smp的Red Hat Enterprise Linux ES Release 4 Update 8。我們已經觀察到(32位)JVM版本1.6.0_13和1.6.0_18。
我們正在與這些標誌運行:
-server電子藝界-Xms512m -Xmx512m -XX:+ UseConcMarkSweepGC -XX:新尺寸=128米-XX:MaxNewSize =128米-XX:+ PrintGCDetails -XX: + PrintGCTimeStamps -XX:+ PrintGCApplicationStoppedTime -XX:-TraceClassUnloading
人都可以提供一些解釋,以什麼可能怎麼回事,和/或一些途徑進行進一步的調查?