我们在Tomcat上出现了GC超载问题,该问题部署了我们的Web应用程序。
我们按照给定的顺序尝试了这些:
1.从session-timeout
减少到10
2.增加了Tomcat的堆内存
3.增加服务器的RAM,然后再次增加Tomcat的堆内存
现在,即使没有GC超载失败,Working Set
中的Process Explorer
内存也会不断增加,并且在一段时间后服务器过慢而无法处理登录。
我们在服务器上发现的可能原因是
在堆转储中,
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收集?
另一个可能的原因是什么?