如何讓Tomcat GC的之前,自動從nginx的upstream摘除,避免超時?
为情所困
为情所困 2017-05-16 17:21:13
0
1
678

tomcat會隔一段時間就進行一次fullgc,這時候如果nginx發送請求過來,就會導致請求超時.

有一個解決方案是在nginx端設定一個較短的超時時間,如果沒有返回,就重新換一台機器重發請求,但是問題是這個請求是由副作用的,不允許重複發生

所有想問一下,有沒有一個機制,在tomcat gc之前,nginx自動將其摘除,gc完成之後,再自動加回來

總之,就是避免tomcat gc造成的超時影響~

PS:

nginx的upstream設定了多台tomcat,只要一台發生了gc,所有落在這台機器的請求都會超時.

为情所困
为情所困

全部回覆(1)
淡淡烟草味

tomcat有個防止記憶體溢出的監聽器:

org.apache.catalina.core.JreMemoryLeakPreventionListener

我懷疑是它調System.gc()導致的,而​​這種GC可能是用的stop the world方式,也就是說是非併發的。你可以試試下面兩種方案:

1.-XX:+ExplicitGCInvokesConcurrent 並發GC
2.停用該監聽器或從JVM等級停用直接呼叫-XX:+DisableExplicitGC

然後觀察一段時間吧。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板