2011-01-14 21 views
6

Mam aplikację internetową java działającą na serwerze Tomcat (Linux). W środowisku produkcyjnym mam problem z wydajnością. W przypadkowych odstępach czasu proces jsvc, na którym działa tomcat, zaczyna działać z 90-100% procesorem. Nie mogę znaleźć wyzwalacza dla tego wydarzenia. Serwer jest systemem czterordzeniowym. Zużycie pamięci nie wskazuje żadnych nieprawidłowości.Narzędzia do monitorowania wykonania wątku java

Jak mogę monitorować, który wątek (ślad stosu aplikacji) w aplikacji powoduje problem?

Sprawdzam z jconsole i PSI Probe, ale oba nie podają żadnych szczegółowych informacji o tym, który wątek w aplikacji powoduje nieprawidłowe działanie procesora.

+0

Co z '[JavaScript]' wydajności tag? – skaffman

+0

@skaffman, Przepraszam java-performance, poprawiłem to. –

+0

Mieliśmy również problemy z wydajnością z naszymi serwerami produkcyjnymi, a ponieważ dołączenie profilera do serwera produkcyjnego jest trudne. Daliśmy NewRelic spróbować. To niesamowite narzędzie, które możesz dodać do swoich badań wydajności. – eSniff

Odpowiedz

5

Jeden stosunkowo łatwy sposób to zrobić (które mogą lub nie mogą działać w Twoim przypadku - zależy od tego, jak długo występuje zachowanie):

Kiedy aplikacja wykazuje zachowanie, które chcesz debugowania (w tym przypadku , 90-100% użycie CPU) używać jstack na identyfikator procesu:

http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

zbadać co wątki są uruchomione i jakie metody ich wystąpienia. Jeśli zrobisz to kilka razy, może być stosunkowo łatwo wykryć łańcuch wywołujący winowajcę. Możesz wtedy po prostu debugować wejście do tego łańcucha.

To niekoniecznie najlepsza lub najbardziej elegancka metoda, ale jest bardzo łatwa do wykonania i może być wszystkim, czego potrzebujesz. Zacząłbym tam. Jest to podobne do filozofii "printf jest najlepszym debuggerem, jakiego kiedykolwiek użyłem".

+3

Pozwolę sobie również dodać, że profiler taki jak JProfiler prawdopodobnie da więcej informacji o tym, co robią wątki, ale ponowne ściganie tego może być bardzo czasochłonne, jeśli problem jest względnie prosty. Podkreślam więc, że szybka analiza kilku przykładów w jstack jest w porządku przed uruchomieniem odpowiednich profilerów. – kvista

+0

Vista dzięki za odpowiedź. Mam zamiar spróbować jstack. –

2

Możesz uzyskać zrzut stosu dla wszystkich wątków w dowolnej aplikacji Java, wysyłając mu sygnał WYJŚCIA.

kill -QUIT [processId] 

To pojawi się w procesie 'stdout.

1

Tylko moje 2 centy, ale zastanawiam się, czy nie eksperymentujesz z problemem pamięci szczytów procesora może być aktywność GC. Więc podczas monitorowania swojego tomcata za pomocą jconsole spójrz na kartę pamięci i sprawdź, czy użycie sterty nie będzie wysokie.

Powiązane problemy