WebappClassLoader和WebServiceClient的内存泄漏

时间:2019-01-29 13:22:25

标签: java spring-boot memory-leaks tomcat8 webservice-client

我们在Tomcat上出现了GC超载问题,该问题部署了我们的Web应用程序。

我们按照给定的顺序尝试了这些: 1.从session-timeout减少到10 2.增加了Tomcat的堆内存 3.增加服务器的RAM,然后再次增加Tomcat的堆内存

现在,即使没有GC超载失败,Working Set中的Process Explorer内存也会不断增加,并且在一段时间后服务器过慢而无法处理登录。

我们在服务器上发现的可能原因是

  1. 具有多个线程的登录请求太多。 在日志中,我们可以看到每次使用不同线程进行的多次登录尝试。有时它们是2秒和/或微秒。所有请求都在登录时共享相同的会话ID。
  2. 在堆转储中,

    a。 ConcurrentHashMap是巨大的 b。每个节点都有StandardSession。 C。每个会话都会通过ServiceClient创建一个新对象UsernamePasswordAthenticationToken,该对象的内存为2G。

在转储中,ServiceClient<class>指向WebappCassLoader,而<loader>又有ConcurrentHashMap和整个ServiceClient

WebServiceClient继承自ServiceClient,具有4个String变量和一个静态变量,看起来像,     私有静态java.net.URL url = ServiceClient.class.getResource(“ server.wsdl”)

server.wsdl在WEB-INF \ lib jar中。

是否有可能由于静态变量而使每个会话中的每个select t.checkin_date, sum(t.total_ed_los * t.esitwotofive) / sum(t.esitwotofive), sum(t.total_ed_los * t.esifourfive) / sum(t.esifourfive), from [Fast Track Quality Research ESI Levels] t group by t.checkin_date 都具有有效的引用,因此它是JVM,因此从未被GC收集?

另一个可能的原因是什么?

0 个答案:

没有答案