首页 > 如何让Tomcat GC的之前,自动从nginx的upstream摘除,避免超时?

如何让Tomcat GC的之前,自动从nginx的upstream摘除,避免超时?

tomcat会隔一段时间就进行一次fullgc,这时候如果nginx发送请求过来,就会导致请求超时.

有一种解决方案是在nginx端设置一个较短的超时时间,如果没有返回,就重新换一台机器重发请求,但是问题是这个请求是由副作用的,不允许重复发生

所有想问一下,有没有一个机制,在tomcat gc之前,nginx自动将其摘除,gc完成之后,再自动加回来

总之,就是避免tomcat gc造成的超时影响~

PS:

nginx的upstream设置了多台tomcat,只要一台发生了gc,所有落在这台机器的请求都会超时.


tomcat有个防止内存溢出的监听器:

org.apache.catalina.core.JreMemoryLeakPreventionListener

我怀疑是它调System.gc()导致的,而这种GC可能是用的stop the world方式,也就是说是非并发的。你可以试一下下面两种方案:

1.-XX:+ExplicitGCInvokesConcurrent 并发GC
2.停用该监听器或者从JVM级别禁用直接调用-XX:+DisableExplicitGC

然后观察一段时间吧。

【热门文章】
【热门文章】