2016-07-25 19 views
1

Ich arbeite an einem Projekt, das bestimmte Metriken von Solr abruft, speichert sie auf einem Index auf Elastic Search und stellt sie weiter grafisch auf Grafana. Hatten bestimmte Abfragen auf Garbage Collection in Solr, sind sie wie folgt:Garbage Collector Auswirkungen auf Solr

  • Wie und welche Metriken von Solr (wie Fehler, Treffer, Einsätze usw.) sind durch den Garbage Collector betroffen?
  • Welche Metriken des Garbage Collectors sollten wir verfolgen, die Auswirkungen auf Solr haben könnten? (wie YGC YGCT FGC FGCT usw.)

Vielen Dank im Voraus!

+0

Siehe auch https://wiki.apache.org/solr/SolrPerformanceProblems und https://wiki.apache.org/solr/ShawnHeisey#GC_Tuning_for_Solr – Risadinha

Antwort

0

GC sollte die Anwendungslogik selbst nicht ändern: Metriken wie Treffer hängen vom Inhalt des Solr-Datenspeichers ab, nicht davon, ob GC ausgeführt wird oder wie. Fehler können durch GC-Verhalten beeinflusst werden, hauptsächlich Zeitüberschreitungen, die durch große GC-Pausen verursacht werden.

Ich würde mich auf GC-Zeiten konzentrieren (sowohl neue als auch alte Generation), da dies die Hauptstörung der Anwendung (Solr) sein wird. Sie können dies über JMX tun (es gibt umfangreiche Dokumentation hier: https://wiki.apache.org/solr/SolrJmx, Sie können GC-Beans unter java.lang finden: type = GarbageCollector). Haken Sie einfach Ihren Profiler oder Ihr Überwachungswerkzeug an.

Auf der Konsole Sie GC Metriken "jstat -gc $ PID" dump kann, wo die wichtigsten Metriken sein könnte ([docs] [1]):

YGC: Number of young generation garbage collection events. 
YGCT: Young generation garbage collection time. 
FGC: Number of full GC events. 
FGCT: Full garbage collection time. 

Hinweis, dass die Zeiten sind kumulativ. Wenn Sie dem Befehl jstat ein Intervall hinzufügen, gibt es ständig Statistiken aus.

Basierend auf diesen Zahlen, wenn Sie GC Pause-Spikes auftreten, und diese Korrelationen zu Solr Error Spikes können Sie in die Reduzierung von ihnen.

Während wir gerade dabei sind, eine weitere gute Möglichkeit GC, um nachzuverfolgen, ist zu aktivieren:

-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCDetails 

, die für jeden GC, einschließlich Zeiten, sowie Dauer jeder Pause spezifischere Details protokolliert (verursacht durch GC aber auch andere Gründe) in Zeilen wie folgt:

Total time for which application threads were stopped: 0.1135087 seconds 

Lassen Sie mich wissen, wenn das Ihre Frage beantwortet.