2012-01-03 10 views
6

Niedawno zaczęliśmy używać New Relic do monitorowania naszej produkcyjnej aplikacji webowej hostowanej na serwerze tomcat 7.0.6, ale zauważyliśmy, że ślad pamięci tego tomcat wzrasta w sposób ciągły iw ciągu tygodnia pochłania cały serwer (AWS High-Memory Double Extra Duża instancja) i przestają reagować, jedynym sposobem na odzyskanie jest ponowne uruchomienie. Dostarczamy Xms & argumenty Xmx podczas uruchamiania tomcat, ale w ciągu kilku godzin wykorzystanie pamięci tomcat proces cross wartość Xmx i stale rośnie, aż cała pamięć serwera się skończy. Oto komenda proces:Dlaczego nowy relikwia spożywa dużo pamięci tomcat?

/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" 

Idealnie byłoby oczekiwać, że proces ten nie stosować więcej niż 8 GB pamięci, ale w ciągu kilku godzin idzie powyżej 10GB i w ciągu kilku dni, to idzie powyżej 20GB i wszystko inne na tym serwerze cierpi z powodu to (używam "top", aby zobaczyć użycie pamięci). Jak to jest możliwe?

+0

Jestem inżynierem pracującym w agencie Java w New Relic. Jeśli chcesz, możesz otworzyć zgłoszenie dotyczące tego problemu na adres [email protected] Którą wersję agenta Java używasz? Czy eksplozja pamięci jest również w pamięci systemowej lub w pamięci sterty? –

+0

Mam również ten problem, więc nie jesteś sam. Złożyłem wniosek o wsparcie w newrelic w ten weekend. W naszym przypadku tomcat po prostu umiera z wyjątkiem OutOfMemory. – JBCP

+0

Zdarza się też –

Odpowiedz

1

Udostępniam więcej informacji na temat wyżej zgłoszonego incydentu. wyciek pamięci nie jest w stercie Java. Aplikacja nigdy nie osiąga żadnego błędu OUT OF MEMORY (8 gb to maksymalny limit sterty Java, który ustawiliśmy). Jednak pamięć wirtualna i rezydentna ciągle rośnie, aż do wyczerpania pamięci RAM. Potwierdziliśmy, że wyciek ma miejsce, gdy używany jest agent relikowy. Wersja: New Relic Agent v2.1.2

1

Przepraszamy za kłopot. My (New Relic) badamy problem, ale pierwszą propozycją jest próba wypróbowania najnowszej wersji agenta Java w wersji 2.2.1, która wprowadziła zasadnicze zmiany w sposobie klasy instrumentów.

Będę kontynuował, gdy będziemy mieli więcej informacji.

+0

Czy są jakieś aktualizacje na ten temat? –

+0

Próbowaliśmy już 2.2.1 i 2.3.1, nadal się dzieje. – ThinkFloyd

+2

Występuje również ten problem. I właśnie testowałem z 2.6 – ZacharyP

4

Wystąpił problem, który dotyczy dowolnej maszyny wirtualnej JVM firmy Sun/Oracle i będzie manifestował się jako nieograniczony wzrost w pamięci bez użycia sterty (rodzimej) pamięci. Dla nowego agenta Java Relic w wersji 2.16+ istnieje obejście problemu polegające na dodaniu opóźnienia zamknięcia do transformacji klasy w pliku newrelic.yml we wspólnej sekcji.

class_transformer: 
    shutdown_delay: 3600 

Od changelog

obejście dla Oracle JVM błąd, który w rzadkich przypadkach powoduje rodem pamięć przeciekać

W rzadkich przypadkach, Oracle JVM może wyciekać rodzimą pamięć OS (nie stertę miejsca), gdy zajęcia przechwytuje agent. To ustawienie wyłącza przechwycenie klas, które są ładowane po podanej liczbie podaną liczbą sekund. Agent będzie kontynuował monitorowanie klas wczytanych przed upływem tego czasu.

Powiązane problemy