最近,我们开始使用New Relic监控我们托管在Tomcat 7.0.6服务器上的生产Web应用程序,但我们观察到Tomcat的内存占用不断增加,在一周内它就会耗尽所有服务器(AWS High-Memory Double Extra Large Instance)的内存,并变得无响应,唯一的方法是重新启动它。
我们在启动Tomcat时提供了Xms和Xmx参数,但几个小时内Tomcat进程的内存使用量超过了Xmx值,并且它不断增加直到所有服务器内存用完。以下是进程命令:
/usr/java/jdk1.6.0_24//bin/java
-Djava.util.logging.config.file=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/conf/logging.properties
-Xms8192m
-Xmx8192m
-javaagent:/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/newrelic/newrelic.jar
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Duser.timezone=Asia/Calcutta
-Djava.endorsed.dirs=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/endorsed
-classpath /xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/bin/bootstrap.jar:/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/bin/tomcat-juli.jar
-Dcatalina.base=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6
-Dcatalina.home=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6
-Djava.io.tmpdir=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/temp org.apache.catalina.startup.Bootstrap start"
理想情况下,我希望这个过程不会使用超过8GB的内存,但是几个小时后它就超过了10GB,在几天内甚至超过了20GB,这导致服务器上的其他所有内容都因此受到影响(我使用“top”查看内存使用情况)。这是怎么可能的?