2012-06-19 50 views
1

這些天,我們遇到了一個奇怪的問題,我們在tomcat上的一些solr應用程序經常超時並且有大量的連接。GC args -XX:+ ExplicitGCInvokesConcurrent導致tomcat超時

幾天前,我們添加了gc arg -XX:+ ExplicitGCInvokesConcurrent,所以我們嘗試刪除這個arg,並且連接數量下降,超時時間也下降了。

但是我們的這個gc arg的一些應用程序沒有遇到這個問題,生病的應用程序和健康的應用程序之間的區別是jdk版本。病態應用程序的jdk版本是1.6.0_21,heathy應用程序是1.6.0_26。

更改jdk版本也解決了這個問題。

有人可以告訴這是老版本jdk的bug還是gc args的bug?

回答

1

是的,-XX:+ExplicitGCInvokesConcurrent的使用似乎與較舊的JDK有關。你可以看看this bug,這是自6u22以來解決(有趣的是你說6u21失敗和6u26的作品)。

+0

這個錯誤看起來正是我們遇到的情況。 Thx爲您提供幫助。而且我還有一個問題,gc locker如何導致tomcat的連接增加。 – PeaceMaker

+0

@PaceCaker不客氣!對於你的第二個問題,我還沒有答案,我必須做出調查抱歉。你應該創建一個新的帖子,你會得到更多的關注。一般來說,如果另一個人出現新的問題,寫一篇新文章就更好了。 –

1

如果您正在刪除-XX:+ExplicitGCInvokesConcurrentSystem.gc()Runtime.getRuntime().gc()所做的所有呼叫都將導致很長的暫停時間。這可能是生病的應用程序的問題,如果健康的應用程序沒有這些電話,那麼可能是你得到的問題。

我不確定jdk的錯誤,但可能是問題是在應用程序的某個地方。

+0

+1 - 如果您已經添加了'-XX:+ ExplicitGCInvokesConcurrent'作爲調用'System.gc()'的劣質代碼的解決方法,那麼真正的解決方案就是加載該代碼並修復任何問題你試圖用'gc()'調用「治癒」。 –

+0

@StephenC OP沒有問什麼是'-XX:+ ExplicitGCInvokesConcurrent' ...我猜如果用戶使用這個選項,他知道它是幹什麼的(或者他可以很容易地使用它)。更重要的是,這個答案是基於他刪除了這個選項的事實,但是清晰地發現了這個選項:「但是我們的一些應用程序'用這個gc arg沒有遇到這個問題。 –

+0

@ alain.janinm是對的,當我們添加這個gc arg時發生問題,而不是當我們刪除它時。 – PeaceMaker