2016-07-06 6 views
0

Ich bin mit einem Leistungsproblem in meiner Web-App in Bezug auf durchschnittliche Antwortzeit konfrontiert.Tomcat Antwortzeit Spikes

Mein Stack ist

Oracle Java 7 Tomcat 7.62/61 AWS Linux-Box Java setzt -Xms1G -Xmx4G -XParallelGCThreads = 4 (nicht abgeschlossen werden mehr hinzufügen) neue Relikt Mit

Aus Meine Web-App, rufe ich anderen Service (ein anderer Java-Prozess auf anderen Rechner)

Ich benutze Executors.newCachedThreadPool() (Ich weiß, es ist schlecht, aber kann mein Problem zu diesem Ding nur noch nicht zuordnen) zu nennen der andere Prozess auf Ruhe.

Nun zu der Frage, meine neue Reliquie zeigt Spike für Web-App durchschnittliche Reaktionszeit alle 15-20 Minuten oder so. Die Anzahl der Threads steigt zu diesem Zeitpunkt. (Nur sichtbare Sache) CPU steigt jedoch nicht alarmierend. Nur marginale Spitze, und bleibt unter 50. GC läuft regelmäßig, obwohl ich keine Zeit habe. (Neues Relikt zeigt nur GC-Sammlung% Alter)

Auf der Service-Seite, durchschnittliche Antwortzeit nie erhöht, bleibt mehr oder weniger flach während der Spitze.

Bohren nach unten auf webap Aufruf zeigt erhöhte Zeit für diejenigen Service obwohl in externen Service (fühlt sich an wie eine Diskrepanz mir zwischen zwei Anwendungen Statistiken über neue Relikt eine Idee?)

  1. Kann jemand Ansatz vorschlagen, die lösen Problem?
  2. Welche Daten sollte ich sammeln, um darüber zu gehen?
  3. Kann jemand Licht auf neue Relikt fehlende Punkte werfen?
  4. Ist es GC oder der Thread-Pool aus dem Aussehen davon?

Antwort

0

GC Probleme zu identifizieren: GC-Protokollierung zum Beispiel ermöglichen, und die resultierende Datei durch GCViewer

zu identifizieren lang laufende Aufgaben auf dem Thread-Pool laufen: einen Profiler anhängen und dann bei Thread Geschichten, um zu sehen, ob Threads des Executor-Pools sind ständig beschäftigt oder haben einige freie Zeit

0

sollten Sie versuchen G1 GC. Es wird lange GC und damit Spike

verkürzen
Verwandte Themen