Jeśli masz aplikację Java, która zużywa procesor, gdy nic nie robi, jak określić, co robi?

Dzwonię do API Java dostawcy, a na niektórych serwerach wydaje się, że JVM przechodzi do pętli odpytywania o niskim priorytecie po zalogowaniu się do API (CPU przy 100% wykorzystaniu). Ta sama aplikacja na innych serwerach nie wykazuje tego zachowania. Dzieje się tak na serwerach WebSphere i Tomcat. Środowisko jest trudne do skonfigurowania, więc trudno jest spróbować czegoś takiego jak profilowanie w Eclipse.

Czy istnieje sposób profilowania (lub innej metody sprawdzania) istniejącej aplikacji Java działającej w Tomcat, aby dowiedzieć się, jakie metody są wykonywane, gdy znajduje się w tym stanie typu spinwait? Aplikacja wykonuje tylko jedną metodę, gdy przechodzi w ten stan (metoda dostawcy). Sprzedawca nie może powtórzyć zachowania (oczywiście).

Aktualizacja:

Korzystając z JConsole udało mi się ustalić, kto był uruchomiony i co robi. Dopiero po kilku godzinach zrozumiałem, dlaczego to robi. Problem polegał na tym, że używany jar dostawcy API nie pasował dokładnie do używanej konfiguracji bazy danych. Domyślnie włączone było śledzenie i monitorowanie wydajności na serwerach, które miały nieznaczną niezgodność konfiguracji. Użyłem innego słoika i wszystko jest w porządku.

Dzięki, Joshua, za odpowiedź. JConsole był niezwykle łatwy w konfiguracji i użyciu do monitorowania istniejącej aplikacji.

@Cringe - eksperymentowałem z niektórymi z sugerowanych opcji. Miałem problemy z konfiguracją JProfilera, wygląda dobrze (ale jest drogo). Idąc naprzód, dodałem wtyczkę Eclipse Profiler i będę przeglądał różne profilery open source, aby porównać funkcjonalność.

questionAnswers(8)

yourAnswerToTheQuestion