Недавно мы начали использовать New Relic для мониторинга нашего рабочего веб-приложения, размещенного на сервере tomcat 7.0.6, но мы заметили, что объем памяти этого tomcat постоянно увеличивается, и в течение недели он съедает весь сервер (AWS High-Memory Double Очень большой экземпляр) и перестает отвечать, единственный способ вернуть его - перезапустить.
Мы предоставляем аргументы 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», чтобы увидеть использование памяти). Как это возможно?