Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

Solr optimieren

Achtung: Störung des Systembetriebs durch falsche Einstellungen. Die hier beschriebenen Vorgehensweisen dürfen nur von versierten Administratoren vorgenommen werden. Im Zweifelsfall unterstützen wir Sie im Rahmen einer Dienstleistung.

Empfehlungen für den Betrieb


Betreiben Sie Solr auf einem System mit folgenden Spezifikationen:

Wann sollte ich Solr optimieren?


Mit der Zeit wächst Ihr Index durch etwa Metadaten oder Dokumente, wodurch Sie die Speichereinstellung von Solr optimieren müssen.

Dies macht sich etwa bemerkbar, wenn Sie den genutzten Speicherbedarf von Solr überprüfen. Liegt dieser regelmäßig bei 50 % des Speichers, erhöhen Sie die Speichereinstellungen oder überprüfen Sie die GC Duration Time.

GC Duration Time prüfen

Unter Garbage Collection versteht man eine Technik, die zur automatischen Speicherverwaltung innerhalb eines Betriebssystems eingesetzt wird. In Programmierumgebungen, die keine automatische Verwaltung des Speichers bieten, muss ein Softwareentwickler durch manuelle Aufrufe Speicherplatz beim Betriebssystem reservieren und diesen nach Benutzung wieder freigeben. Nur so kann der Speicher für andere Zwecke wieder verwendet werden. Wenn die Programmlogik zur Freigabe des Speichers Fehler enthält, können Speicherlecks entstehen.

Bei der Garbage Collection werden die reservierten Speicherbereiche automatisch daraufhin untersucht, ob sie wieder freigegeben werden können. Die entsprechende Bewertung kann nach verschiedenen Kriterien erfolgen. Auch die Freigabe selbst geschieht automatisch (Quelle: itwissen.info/garbage-collection-GC-Garbage-Collection, 27.05.2020, 15:35 Uhr).

Um den aktuellen Performance-Zustand von Solr zu identifizieren und somit die optimale Parametereinstellung festzulegen, gehen Sie folgendermaßen vor:

  1. Öffnen Sie auf dem agorum core-Server folgenden Pfad. In diesem befindet sich die Datei solr_gc.log.
    <InstallDir>/solr/server/logs
    
  2. Analysieren Sie die Datei solr_gc.log mit einem GC-Tool, etwa https://gceasy.io.

    • Finden Sie lange Pausen im Bereich GC Duration Time, ist dies ein Hinweis auf eine schlechte Konfiguration oder ein zu langsames System.
    • Finden Sie viele Full GC-Werte, ist nicht genügend Speicher zugeteilt. Beachten Sie primär den Bereich Pause GC Duration.

    Beispiel für schlechtes Verhalten
    Beispiel für gutes Verhalten
Beispiel für schlechtes Verhalten

 

Beispiel für gutes Verhalten

Die GC Duration Time bezieht sich nicht nur auf die Nutzung von Solr, sondern bezieht jeglichen Prozess ein.

Führen Sie etwa einen Importvorgang mit parallel laufenden Threads aus, fällt der Speicherzuwachs pro Zeiteinheit kürzer aus. Dieser Prozess verfälscht den GC-Wert des „realen Betriebs“. Beachten Sie deswegen bei dieser Überprüfung, dass Ihr System keine ungewöhnlichen Aktionen ausführt, da Sie andernfalls einen Sonderfall optimieren.

Wird immer wieder die gleiche Menge an RAM vom GC freigeräumt, zu sehen unter Reclaimed Bytes, ist alles in Ordnung. Sind aber Ausreißer im Bereich Pause GC Duration Time enthalten, ist dies ein Hinweis auf ungenügend verfügbare Ressourcen, etwa folgende:

Werden laufende (in Sekundenabständen) Full GC durchgeführt, ist der SOLR JVM zu wenig RAM zugeteilt. Erhöhen Sie den RAM.

Den RAM erhöhen


  1. Öffnen Sie folgenden Pfad. In diesem finden Sie die Datei solr.cmd oder solr.sh.
    <InstallDir>/solr
    
    Im Start-Bereich stehen die Speichereinstellung:
    bin\solr.cmd start -cloud -p 8981 -z localhost:9981/solr -s "%CD%/nodes/node/solr" -m 16g -a "-Djetty.host=127.0.0.1 -Djute.maxbuffer=104857600"
    
    16g steht für 16 Gigabyte. Teilen Sie hier nicht mehr zu, als für das Betriebssystem zur Verfügung steht. Es sollte auch noch eine größere Menge Speicher dem Betriebssystem zur Verfügung stehen, sodass Lese-Caches des Betriebssystems effektiv verwendet werden können.
  2. Starten Sie agorum core neu.

Den RAM fest reservieren


Im Standard wird der benötigte Speicher dynamisch alloziert. Die Performance lässt sich steigern, wenn Sie der Java-Maschine mitteilen, dass der zugeteilte Speicher gleich von vorneherein reserviert werden soll. Zudem können Sie leicht erkennen, ob   das Betriebssystem mit allen laufenden Prozessen auf genügend RAM-Ressourcen zugreifen kann.

  1. Öffnen Sie folgenden Pfad:
    <installDir>/bin/
    
  2. Bearbeiten Sie je nach Betriebssystem folgende Datei:

    Windows
    solr.in.cmd

    Linux
    solr.in.sh
  3. Fügen Sie je nach Betriebssystem Folgendes unterhalb von GC_TUNE hinzu (blau markiert):

    Windows
    set GC_TUNE=-XX:NewRatio=3 ^
     -XX:SurvivorRatio=4 ^
     -XX:TargetSurvivorRatio=90 ^
     -XX:MaxTenuringThreshold=8 ^
     -XX:+UseConcMarkSweepGC ^
     -XX:+UseParNewGC ^
     -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 ^
     -XX:+CMSScavengeBeforeRemark ^
     -XX:PretenureSizeThreshold=64m ^
     -XX:+UseCMSInitiatingOccupancyOnly ^
     -XX:CMSInitiatingOccupancyFraction=50 ^
     -XX:CMSMaxAbortablePrecleanTime=6000 ^
     -XX:+CMSParallelRemarkEnabled ^
     -XX:+ParallelRefProcEnabled
    
    set GC_TUNE=%GC_TUNE% -XX:+AlwaysPreTouch

    Linux
    GC_TUNE="-XX:NewRatio=3 \
    -XX:SurvivorRatio=4 \
    -XX:TargetSurvivorRatio=90 \
    -XX:MaxTenuringThreshold=8 \
    -XX:+UseConcMarkSweepGC \
    -XX:+UseParNewGC \
    -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 \
    -XX:+CMSScavengeBeforeRemark \
    -XX:PretenureSizeThreshold=64m \
    -XX:+UseCMSInitiatingOccupancyOnly \
    -XX:CMSInitiatingOccupancyFraction=50 \
    -XX:CMSMaxAbortablePrecleanTime=6000 \
    -XX:+CMSParallelRemarkEnabled \
    -XX:+ParallelRefProcEnabled"
    
    GC_TUNE="$GC_TUNE -XX:+AlwaysPreTouch"
  4. Starten Sie agorum core neu.

G1GC als Garbage Collector verwenden


Als Standard Garbage Collector wird CMS eingesetzt. Sie können allerdings auch den „neuen“ G1GC verwenden. Langzeittests haben gezeigt, dass der G1GC zwar insgesamt geringfügig langsamer, aber stabiler in der Lauffähigkeit ist, also bei hoher Belastung weniger lange GC-Pausen entstehen. Gerade bei hohem Speicherbedarf arbeitet G1GC besser.

So aktivieren Sie G1GC:

  1. Öffnen Sie den Pfad:
    <installDir>/solr/
    
  2. Bearbeiten Sie je nach Betriebssystem folgende Datei:

    Windows
    solr.in.cmd

    Linux
    solr.in.sh
  3. Fügen Sie je nach Betriebssystem Folgendes unterhalb von GC_TUNE hinzu (blau markiert):

    Windows
    set GC_TUNE=-XX:NewRatio=3 ^
     -XX:SurvivorRatio=4 ^
     -XX:TargetSurvivorRatio=90 ^
     -XX:MaxTenuringThreshold=8 ^
     -XX:+UseConcMarkSweepGC ^
     -XX:+UseParNewGC ^
     -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 ^
     -XX:+CMSScavengeBeforeRemark ^
     -XX:PretenureSizeThreshold=64m ^
     -XX:+UseCMSInitiatingOccupancyOnly ^
     -XX:CMSInitiatingOccupancyFraction=50 ^
     -XX:CMSMaxAbortablePrecleanTime=6000 ^
     -XX:+CMSParallelRemarkEnabled ^
     -XX:+ParallelRefProcEnabled
    
    set GC_TUNE=-XX:+UseG1GC ^
      -XX:+PerfDisableSharedMem ^
      -XX:+ParallelRefProcEnabled ^
      -XX:G1HeapRegionSize=4m ^
      -XX:MaxGCPauseMillis=250 ^
      -XX:InitiatingHeapOccupancyPercent=75 ^
      -XX:+AggressiveOpts

    Linux
    GC_TUNE="-XX:NewRatio=3 \
    -XX:SurvivorRatio=4 \
    -XX:TargetSurvivorRatio=90 \
    -XX:MaxTenuringThreshold=8 \
    -XX:+UseConcMarkSweepGC \
    -XX:+UseParNewGC \
    -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 \
    -XX:+CMSScavengeBeforeRemark \
    -XX:PretenureSizeThreshold=64m \
    -XX:+UseCMSInitiatingOccupancyOnly \
    -XX:CMSInitiatingOccupancyFraction=50 \
    -XX:CMSMaxAbortablePrecleanTime=6000 \
    -XX:+CMSParallelRemarkEnabled \
    -XX:+ParallelRefProcEnabled"
    
    GC_TUNE="-XX:+UseG1GC 
      -XX:+PerfDisableSharedMem
      -XX:+ParallelRefProcEnabled
      -XX:G1HeapRegionSize=4m
      -XX:MaxGCPauseMillis=250
      -XX:InitiatingHeapOccupancyPercent=75
      -XX:+AggressiveOpts"
  4. Starten Sie agorum core neu.