Почему New Relic потребляет много памяти кота?

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


person ThinkFloyd    schedule 03.01.2012    source источник
comment
Я инженер, работающий над агентом Java в New Relic. Если хотите, вы можете отправить заявку в службу поддержки по адресу [email protected]. Какую версию агента Java вы используете? Кроме того, происходит ли взрыв памяти в системной памяти или в куче памяти?   -  person    schedule 03.01.2012
comment
У меня тоже такая проблема, так что вы не одиноки. В эти выходные я отправил запрос в службу поддержки newrelic. В нашем случае tomcat просто умирает с исключением OutOfMemory.   -  person JBCP    schedule 18.03.2012


Ответы (3)


Существует проблема, которая затрагивает любую виртуальную машину Sun/Oracle JVM и проявляется в неограниченном увеличении объема не кучи (собственной) памяти. Для агента Java New Relic версии 2.16+ существует обходной путь: добавление задержки завершения работы для преобразования класса в файле newrelic.yml в общем разделе.

  class_transformer:
    shutdown_delay: 3600

Из журнала изменений.

Обходной путь для ошибки Oracle JVM, которая в редких случаях вызывает утечку собственной памяти

В редких случаях Oracle JVM может привести к утечке собственной памяти ОС (не пространства кучи), когда классы перехватываются агентом. Этот параметр отключает перехват классов, загружаемых по истечении заданного количества секунд. Агент продолжит отслеживать классы, загруженные до этого времени.

person NR_Tony    schedule 06.05.2013

Я делюсь дополнительной информацией о вышеупомянутом инциденте. утечка памяти не в куче Java. Приложение никогда не достигает какой-либо ошибки OUT OF MEMORY (8 ГБ - это максимальный предел кучи Java, который мы установили). Однако виртуальная и резидентная память продолжают увеличиваться до тех пор, пока не закончится оперативная память. Мы подтвердили, что эта утечка происходит при использовании реликтового агента. Версия: New Relic Agent v2.1.2

person user1061477    schedule 04.01.2012

Извините за неприятности. Мы (New Relic) изучаем проблему, но первое предложение — попробовать последнюю версию 2.2.1 агента Java, которая внесла существенные изменения в то, как мы инструментируем классы.

Я буду следить здесь, когда у нас будет больше информации.

person Darin    schedule 04.01.2012
comment
Я также испытываю эту проблему. И я только что проверил с 2.6 - person ZacharyP; 27.06.2012