搜尋

首頁  >  問答  >  主體

如何讓Tomcat GC的之前,自動從nginx的upstream摘除,避免超時?

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

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

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

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

PS:

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

为情所困为情所困2753 天前651

全部回覆(1)我來回復

  • 淡淡烟草味

    淡淡烟草味2017-05-16 17:23:13

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

    org.apache.catalina.core.JreMemoryLeakPreventionListener
    

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

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

    然後觀察一段時間吧。

    回覆
    0
  • 取消回覆