Wenn Sie eine Java-Anwendung haben, die CPU verbraucht, wenn sie nichts tut, wie bestimmen Sie, was sie tut?

Ich rufe die Java-API eines Anbieters auf, und auf einigen Servern scheint die JVM nach der Anmeldung an der API in eine Abrufschleife mit niedriger Priorität zu geraten (CPU bei 100% Auslastung). Dieselbe App auf anderen Servern zeigt dieses Verhalten nicht. Dies geschieht unter WebSphere und Tomcat. Die Umgebung ist schwierig einzurichten, sodass es schwierig ist, ein Profil in Eclipse zu erstellen.

Gibt es eine Möglichkeit, eine vorhandene Java-App, die in Tomcat ausgeführt wird, zu profilieren (oder eine andere Methode zum Überprüfen), um herauszufinden, welche Methoden ausgeführt werden, während sie sich in diesem Zustand befinden? Die App führt nur eine Methode aus, wenn sie in diesem Status ist (Herstellermethode). Der Anbieter kann das Verhalten (natürlich) nicht replizieren.

Aktualisieren:

Mit Hilfe von JConsole konnte ich feststellen, wer lief und was sie taten. Ich brauchte ein paar Stunden, um herauszufinden, warum es so war. Das Problem bestand schließlich darin, dass die verwendete API-JAR des Herstellers nicht genau mit der verwendeten Datenbankkonfiguration übereinstimmte. Standardmäßig wurden die Ablaufverfolgung und die Leistungsüberwachung auf den Servern aktiviert, bei denen die Konfiguration leicht falsch war. Ich habe ein anderes Glas benutzt und alles ist gut.

Also danke, Joshua, für deine Antwort. JConsole war extrem einfach einzurichten und zu verwenden, um eine vorhandene Anwendung zu überwachen.

@Cringe - Ich habe mit einigen der von Ihnen vorgeschlagenen Optionen experimentiert. Ich hatte einige Probleme mit der Einrichtung von JProfiler, es sieht gut aus (aber teuer). In Zukunft habe ich das Eclipse-Profiler-Plugin hinzugefügt und werde die verschiedenen Open-Source-Profiler durchsehen, um die Funktionalität zu vergleichen.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage