2012-04-04 4 views
0

Ich bin neu in Java und habe als eine Aufgabe herauszufinden, warum nach einiger Zeit läuft Server 100% der CPU verbraucht. Ich denke, ich sollte schauen, was die Threads in dieser Anwendung tun. Als ich den Dienst stoppen wollte, wurde der 5605. Thread gestartet. Wie kontrolliere ich, welche Threads gestoppt sind oder nicht oder zu lange laufen?Wie kontrolliert man, ob ein Thread gestoppt ist oder nicht oder zu lange läuft?

Danke.

+1

Ich denke, Sie sollten in Java-Profiler wie http://www.yourkit.com/ – Gray

+0

suchen Werfen Sie einen Blick auf diese Antwort, die ich in einer früheren Frage veröffentlicht: http://StackOverflow.com/a/ 6868752/425406 Hier geht es um eine Möglichkeit, die Teile des Codes zu identifizieren, die CPU-Fresser sind. – Sean

Antwort

0

Wenn Sie auf * nix-Umgebung sind zunächst versuchen, die Prozess-ID ID

  1. Holen Sie sich das Verfahren zu finden. ps -ef | grep "java"
  2. Holen Sie sich den Thread Dump. kill -3 processid
  3. Schauen Sie in den Server-Logs, welche Threads gibt es und wenn es "Blocking" -Threads gibt, dann sind sie die Schuldigen Blick auf den Stack-Trace und es kann einige Hinweise geben.
+0

Blockierte Threads verwenden überhaupt keine CPU. –

+0

Versuchen Sie, Jconsole an den Prozess anzuhängen und zu sehen, was tatsächlich passiert http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html – srinik

0

Der Server und der Client jvms (Java Virtual Machine) unterscheiden sich. Das Klientdenken ist im Grunde "du wirst eins unter anderen Typen sein, die versuchen, die gleichen Betriebsmittel zu benutzen". Der Servergedanke ist "mach weiter, du hast den ganzen Spielplatz für dich".

Verwandte Themen