Недавно мы начали использовать New Relic для мониторинга нашего производственного webapp, размещенного на сервере tomcat 7.0.6, но мы заметили, что объем памяти этого tomcat постоянно растет и в течение недели он съедает всю память сервера (AWS High-Memory Double Extra Large Instance) и становится неотзывчивым, единственный способ вернуть его обратно - перезапустить его. Мы указываем аргументы Xms и Xmx при запуске tomcat, но в течение нескольких часов использование памяти процессом 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"
В идеале я бы ожидал, что этот процесс не будет использовать более 8 ГБ памяти, но в течение нескольких часов он использует более 10 ГБ, а в течение нескольких дней - более 20 ГБ, и все остальное на сервере страдает из-за этого (я использую 'top' для просмотра использования памяти). Как такое возможно?