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.
Siehe auch https://wiki.apache.org/solr/SolrPerformanceProblems und https://wiki.apache.org/solr/ShawnHeisey#GC_Tuning_for_Solr – Risadinha