Temat: Proces Javy przeciaza CPU
Witajcie,
dzieki za odpowiedzi. Zaczalem problem glebiej analizowac, troche poczytalem na ten temat, zainstalowalem JProfilera.
Teraz mam inny problem (ale pewnie jest powiazany z tym co opisalem).
Z catalina.out (a dokladnie z informacji o gc) wynika, ze PermGen potrzebuje coraz wiecej pamieci. Wzrost jest caly czas. W nocy gdy ruch na serwerze jest duzo mniejszy to takze caly czas postepuje - ale duzo wolniej.
Trwa to az do outofmemory permgen.
Jak juz wspomnialem, w tej tematyce jestem nowy. Niestety, nie widze, zebym mogl cokolwiek przy pomocy JProfilera zdzialac. Za pomoca tego narzedzia widze co lezy na Heap'ie, jednak nie o niego chodzi (o ile sie nie myle).
Domyslam sie, ze jakis classloader zbyt czesto jest wywolywany.
Jednak, jak moge znalesc gdzie dokladnie jest blad ?
Na tym serwerze jest niestety kilkanascie aplikacji.
Gdy zmienam cos na serwerze np. konfiguracje lub dodawana jest nowa aplikacja to restartuje calego tomcata.
Java:
1.5.0_16-b02
Tomcat 5.5.17
Wywoluje tomcat nastepujaco:
java -server -Xms1g -Xmx1g -Xmn400m -XX:PermSize=350m -XX:MaxPermSize=350m -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31 -XX:+PrintCommandLineFlags -XX:+PrintVMOptions -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -verbose:class -Xbootclasspath/a:/home/tomcat/lib/cas-model-0.1-SNAPSHOT.jar:/home/tomcat/lib/commons-lang-2.1.jar -Dfile.encoding=UTF-8 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/home/tomcat/tomcat55/conf/logging.properties -agentlib:jprofilerti=port=9090,nowait,id=110,config=/home/tomcat/jprofiler5/config/config.xml -Xbootclasspath/p:/home/tomcat/jprofiler5/bin/agent.jar -Djava.endorsed.dirs=/home/tomcat/tomcat55/common/endorsed -classpath :/home/tomcat/tomcat55/bin/bootstrap.jar:/home/tomcat/tomcat55/bin/commons-logging-api.jar -Dcatalina.base=/home/tomcat/tomcat55 -Dcatalina.home=/home/tomcat/tomcat55 -Djava.io.tmpdir=/home/tomcat/tomcat55/temp org.apache.catalina.startup.Bootstrap start
Pozdrawiam,
Rafal
Krzysztof K.:
Rafal M.:
Witajcie,
na moim serwerze (linux) proces javy pozera 99% CPU. Zdarza sie to regularnie co 2 tygodnie (w piatki).
Na tym procesie jest Tomcat a na nim kilka aplikacji web'owych.
Jak zrestartuje Tomcata to wszystko wraca do normy, czasami samo (bez restartu) wraca po 20-30 minutach.
Nie mialem przedtem do czynienia z taki problemem, jednak domyslam sie, ze po postu musze dokladnie przeanalizowac co sie dzieje w tym procesie i gdzie jest blad (tj. ktora aplikacja/klasa powoduje ten efekt.
Czy moglibyscie polecic program do analizy ?
Pozdrawiam,
Rafal
Witam.
Na pierwszy rzut oka wyglada mi to na problem z pamiecia albo na heap'ie albo w permGen space tak jak kolega wczesniej napisal. Aby zmonitorować pierwsza opcje proponuje:
1. Odpalic np. JProfiler'a i online zobaczyc co sie dzieje w danej chwili z aplikacja. Niestety jak problem sie pojawia po 2 tyg dzialania aplikacji moze byc to trudne do przetestowania.
2. Jezeli uzywasz jdk (Sun, SAP and HP JDK/JVM from version 1.4.2_12 and 5.0_7 and 6.0 upwards) to mozna wymusic heap dump'a w chwili w ktorej pojawi sie problem. Wystarczy ze w opcjach startowych JVM'a Tomcata (CATALINA_OPTS) dodasz -XX:+HeapDumpOnCtrlBreak co umozliwi manulany zrzut heapa. Dla spokoju mozna dodac -XX:+HeapDumpOnOutOfMemoryError , ktory zrobi zrzut heap'a automatycznie gdy poleci OutOfMemoryError.
Uwaga! Nie wymaga to podpinania sie do procesu javy dodatkowych monitoring tool'sow itp.
Pozniej przeprowadzasz analize heap dump'a za pomoca np
SAP heap memory analyzer http://www.theserverside.com/news/thread.tss?thread_id... albo sun'owego jhat http://java.sun.com/javase/6/docs/technotes/tools/shar...
Jak juz sie dowiesz jakie obiekty zalegaly w pamieci i ile ich bylo bedzie mozna pomyslec o tuningowaniu JVM pod katem pamieci i GC.
W 1 i 2 opisalem Tobie jak mozna zobaczyc co jest grane w heap'ie. Istnieje ewentualnosc, ze problem tkwi wlasnie w PermGen space czyli fragmencie pamieci w ktorej JVM trzyma informacje o zaladowanych klasach itp. Zalazenie od wyniku Twojej analizy trzeba bedzie zwiekszyc pamiec na heap'ie lub(i) w permGen.
Czy moglbys napisac jakie opcje JVM aktualnie masz w CATALINA_OPTS?
I jaka JVM dokladnie uzywasz, odpal: >java -version
Pozdrawiam,
KrzysiekKrzysztof K. edytował(a) ten post dnia 13.09.08 o godzinie 14:30