2016-03-22 10 views
1

Ich habe ein Glas im Hintergrund auf einem Ubuntu-Server ausgeführt.Java-Prozess im laufenden Zustand bleiben und CPU verbrauchen

In einem bestimmten Moment, starten die Anwendung zu viel CPU (400%) und 4 Kind-Prozess Aufenthalt in R Zustand consumming:

HTOP state before/after problem

NB: das Problem wegen einer Menge von nicht erzeugt von Verwendung, wird es nach einer bestimmten Zeit (3-4 Tage) verursacht. Wir müssen Java töten und es erneut ausführen.

EDIT ADD GC Log:

habe ich java -verbose: gc und hier ist das, was ich bekam die App und wenn die Anwendung zeigen das Problem, bevor erklärt zwischen dem Neustart.

ADD EDIT OLD GEN Log:

Im ersten Graph, der x-Achse ist nicht in der zweiten, weil das Protokoll nicht den Zeitstempel gegeben hat, wenn der GC durchgeführt wird. Auch in der ScreenShot unten, lief der Visual GC in Visual VM in dem Zeitraum, in dem das Problem aufgetreten ist.

Graph Line for the GC

Hier ist die Log-Sicherung:

http://www.filedropper.com/threaddump2

+0

bitte geben Sie uns weitere Informationen, haben Sie einige Protokolle? – HCarrasko

+0

@Hector Ich weiß nicht, welche Protokolle ich zu meiner App hinzufügen kann, die hilfreich sein könnten! – EspritBat

Antwort

2

Eine mögliche Ursache (und dies ist reine Spekulation, da wir keine Informationen haben, weiter zu gehen) ist, dass der Java-Prozess ist Der Speicher ist erschöpft und es werden Back-to-Back-Speicherbereinigungen durchgeführt, die CPU-intensiv sind. Aktivieren Sie die Protokollierung, um festzustellen, ob Sie einen OutOfMemory-Fehler erhalten. Wenn Sie dies tun, aktivieren Sie die GC-Protokollierung und versuchen Sie, die Quelle des Speicherlecks zu ermitteln.

Nach dem Betrachten Ihrer Grafik würde ich sagen, dass Sie definitiv Ressource Leck haben, wenn die X-Achse etwas größer als Sekunden ist. Es wäre interessant, wenn Sie das Verhalten der Dauergeneration im Endstadium und mit höherer Auflösung posten könnten.

Ok, mit Blick auf die neuen Grafiken bin ich ein wenig überrascht. Ich kann das Verhalten des ersten Graphen nicht mit den neuen Graphen in Einklang bringen. Sie scheinen überhaupt keine Speicherprobleme zu haben. Altes Gen ist im Prinzip frei wie junges Gen. Haben Sie Protokolle von Ihrer Anwendung?

Die neuen Diagramme geben keine aussagekräftigeren Informationen, Sie könnten einen Thread-Dump erstellen, wenn die App drunter und drüber geht. Verwenden Sie jstack <pid> >> thread_dump.log

+0

über welche Art von Protokoll Sie sprechen? – EspritBat

+0

Sie haben normalerweise ein Anwendungsprotokoll? Sie haben kein server.log oder ähnliches? Sie bekommen nichts auf std.err? – Erik

+0

Ich mache meine App Log und umleiten "system.out.println" in eine andere Protokolldatei. Aber es gibt keinen Fehler oder eine Ausnahme. – EspritBat