Please enable JavaScript to view this site.

Administrationshandbuch

Navigation: Tech Doc > Performanceoptimierungen

Allgemeine Optimierungen

Scroll Zurück Oben Weiter Mehr

Es gibt einige Möglichkeiten, die Geschwindigkeit von JobRouter durch gezielte Einstellungen zu optimieren. Dies ist insbesondere bei Produktivsystemen empfehlenswert, um die Nutzererfahrung zu verbessern. Bei einer Neuinstallation ist JobRouter meist optimal konfiguriert, jedoch kann es inbesondere bei älteren Systemen nach regelmäßigen JobRouter-Updates vorkommen, dass bestimmte optimierte Einstellungen nicht automatisch vorgenommen werden können und daher durch manuelles Anpassen eine deutliche Verbesserung der Geschwindigkeit erreicht werden kann.

In diesem Kapitel sind jene Einstellungen zusammengefasst, die für eine Neuinstallation empfohlen werden und deren Verwendung bei Altsystemen häufig zu einer großen Verbesserung führt.

Bitte beachten Sie: Die folgenden Einstellungen machen teilweise einen Neustart oder eine Neuinstallation von Software erforderlich oder können tiefgreifende Auswirkungen auf die Verfügbarkeit und / oder Sicherheit des System haben. Gehen Sie also mit Bedacht vor und legen Sie vorab eine Datensicherung an.

Geschwindigkeitsmessung durchführen

Bevor Sie mit Maßnahmen zur Verbesserung der Geschwindigkeit von JobRouter beginnen, sollten Sie sich einen Überblick verschaffen, wie lange JobRouter benötigt, um einen Aufruf zu verarbeiten. Wichtig ist hierbei, dass Sie die Messung vorab und die Messung nach den Änderungen bei etwa gleicher Serverlast ausführen; Schwankungen in der Systemlast können teils zu extremen Abweichungen führen, die keine klare Aussage über die Performance-Veränderung einer bestimmten Maßnahme zulassen.

Mit folgender Konstante in der config.php wird die Zeit im JobRouter unten rechts angezeigt, welche PHP zur Verarbeitung eines JobRouter-Seitenaufrufs benötigt. Durch die möglichen Last-Schwankungen kann dies aber nur als grober Richtwert verstanden werden und ist keinesfalls für genaue Messungen geeignet.

define('CONST_SHOW_TOTAL_TIME', true);

Einstellungen des Webservers und PHP

Ist FastCGI im IIS optimal konfiguriert?

Die Standardeinstellungen für FastCGI im IIS sind für Produktivsysteme nicht optimal. Um die Einstellungen zu überprüfen bzw. anzupassen, gehen Sie wie folgt vor:

Starten Sie den IIS-Manager. Klicken Sie dort zunächst auf den Serverknoten. Doppelklicken Sie anschließend auf FastCGI-Einstellungen

Es öffnet sich die Auflistung aller registrierten FastCGI-Anwendungen

Wählen Sie die für JobRouter aktive PHP-Version aus

Klicken Sie nun auf der rechten Seite auf Bearbeiten

Folgenden Einstellungen sollten vorgenommen worden sein:

"MaxRequests"-Instanz – 10000

Max. Anzahl von Instanzen – 50 (mindestens, je nach Auslastung und verfügbarem Arbeitsspeicher kann ein höherer Wert die Geschwindigkeit positiv beeinflussen)

Aktivitätstimeout – 600 Sekunden (mindestens, jedoch keinesfalls weniger als der in der Einstellung max_execution_time in der php.ini-Konfiguration von PHP hinterlegte Wert)

Anforderungstimeout – 300 Sekunden (mindestens)

Leerlauftimeout – 900 Sekunden (mindestens)

Falls eine dieser Einstellungen nach unten abweicht, ist es empfehlenswert, dies zu korrigieren. Klicken Sie anschließend in der Zeile Umgebungsvariablen rechts neben (Auflistung/Sammlung) auf die Schaltfläche. Prüfen Sie, ob folgende Umgebungsvariablen hinzugefügt wurden.

Name: PHPRC, Value: Pfad zum PHP-Installationsverzeichnis

Name: PHP_FCGI_MAX_REQUESTS, Value: 10000 (identisch mit der Einstellung "MaxRequests"-Instanz)

Ist der PHP-Opcache aktiviert und korrekt eingestellt?

Der Opcache speichert PHP-Dateien in vorkompiliertem, optimiertem Zustand und sorgt so für eine immense Beschleunigung aller PHP-Aufrufe. Im besten Fall ist der Opcache so konfiguriert, dass der Cache vollständig im Arbeitsspeicher verbleibt, sodass möglicht wenige langsame Dateizugriffe erforderlich werden. Folgende Einstellungen sorgen dafür, dass der Opcache aktiv und für JobRouter optimal eingestellt ist (Konfigurationsdatei php.ini):

; load opcache extension

zend_extension="C:\Program Files\PHP 7.4\ext\php_opcache.dll"

 

;...

 

[opcache]

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=32

opcache.max_accelerated_files=100000

;opcache.validate_timestamps=0; When disabled, you must restart the webserver for changes to the filesystem to take effect.

opcache.revalidate_freq=5

opcache.enable_file_override=1

opcache.dups_fix=1

opcache.error_log="C:\Program Files\PHP 7.4\logs\opcache.log"

;opcache.log_verbosity_level=2

opcache.mmap_base=0x20000000

opcache.file_cache="C:\Program Files\PHP 7.4\tmp\opcache"

;opcache.file_cache_only=1

opcache.file_cache_fallback=1

Überprüfen Sie in jedem Fall vor dem Speichern und Neustart des Webservers, ob die Pfade für Log-Dateien und Opcache korrekt angegeben sind und PHP über Schreibrechte für diese Verzeichnisse verfügt.

Ist die Xdebug-Extension deaktiviert?

Die Xdebug-Extension wird zum Ermitteln von Problemen im Programmcode verwendet. In Produktivsystemen kann dies allerdings dazu führen, dass PHP wesentlich langsamer ausgeführt wird, da bei jedem Aufruf zusätzliche Instruktionen ausgeführt werden müssen. Stellen Sie deshalb sicher, dass die Extension mit einem Semikolon auskommentiert und somit deaktiviert ist:

;zend_extension="C:\Program Files\PHP 7.4\ext\php_xdebug.dll"

Bitte beachten Sie: Wenn Sie die Xdebug-Extension deaktivieren, löschen Sie anschließend auch bitte alle Dateien und Unterordner aus dem tmp/opcache Ordner. Den Pfad zu diesem Verzeichnis finden Sie in der php.ini bei der Option opcache.file_cache.

Beispiel:

opcache.file_cache="C:\Program Files\PHP 7.4\tmp\opcache"

JobRouter- und Dienstekonfiguration

Neben der Infrastruktur kann auch eine Konfigurationsänderung in JobRouter selbst einiges zu einer besseren Geschwindigkeit beitragen. Dies betrifft natürlich auch die Konfiguration der Dienste.

Ist der JobRouter-Cache schnell zugreifbar?

Bitte beachten Sie: Verwenden Sie Redis als Caching-Server, ist dieses Problem für Sie nicht relevant.

JobRouter verwendet einen Cache, um Einstellungen, die häufig gelesen werden, schnell zugreifbar zu machen. Darunter fallen verschiedene JobRouter-Einstellungen wie z.B. Pfade, Lizenzinformationen und auch Benutzereinstellungen sowie vom Benutzer in diversen Menüs gesetzte Filter. Dieser Cache wird standardmäßig unter [jobrouter]\cache\service abgelegt.

Im Hauptverzeichnis [jobrouter]\cache befinden sich zudem noch prozessrelevante Cache-Dateien für Übersetzungen, PHP-Funktionen und Dialoge.

Wird JobRouter mit einem Load Balancer betrieben, d.h. zur Lastverteilung werden mehrere (JobRouter-)Webserver eingesetzt, dann ist es zwingend notwendig [jobrouter]\cache auf ein Netzlaufwerk auszulagern, auf das alle Webserver Zugriff haben, damit vor allem die prozessrelevanten Cache-Dateien immer aktuell und zugreifbar sind. In diesem Fall kann der Pfad zum Cache-Verzeichnis in der config.php angepasst werden.

Unter Windows, und vor allem bei Verwendung einer Netzwerkfreigabe, ist der Zugriff auf [jobrouter]\cache\service jedoch erfahrungsgemäß sehr langsam. Hier wird an erster Stelle der Einsatz von Redis als Caching-Server empfohlen. Alternativ kann der Cache auch in die Datenbank ausgelagert werden, dabei werden die Daten statt in [jobrouter]\cache\service in der JobRouter-Datenbank in einer Tabelle namens cache_items gespeichert. Die Datenbank liefert in verteilten Systemen, aber auch bei Betrieb eines Einzelwebservers weitaus bessere Performance als das Dateisystem. Die zugehörige Einstellung kann ebenfalls in der config.php vorgenommen werden.

Ist der Dialogcache aktiviert?

JobRouter verfügt zusätzlich über einen Dialog-Cache. Dieser Dialog-Cache sollte in Produktivsystemen in jedem Fall aktiv sein. Stellen Sie daher sicher, dass in der config.php die Konstante CONST_CACHE_DIALOGS bestenfalls gar nicht eingetragen, aber keinesfalls auf false konfiguriert ist.

Ist der Log-Level in der config.php richtig eingestellt?

Log-Dateien werden normalerweise immer dann geschrieben, wenn Fehler auftreten. Um Fehler aufzudecken kann der Log-Level aber auch so verändert werden, dass detailliertere und mehr Meldungen in den Log-Dateien auftauchen. Stellen Sie sicher, das in der config.php folgende Konstanten nicht eingetragen (bzw. auskommentiert) sind:

CONST_ERROR_REPORTING, CONST_LOG_LEVEL_FILE, CONST_DEBUG

Ist der Log-Level der Dienste richtig eingestellt?

Auch für die JobRouter-Dienste kann der Log-Level eingestellt werden. In Produktivsystemen sollte dieser Log-Level über die JobRouter-Dienstekonfiguration auf "Warn" eingestellt sein.

Werden die Counter für Eingangsboxen benötigt?

Ein häufiges Problem in besonders groß angelegten Systemen mit vielen Benutzern ist, dass die so genannten Counter der Eingangsboxen bei jedem Aufruf des JobRouters aktualisiert werden und dadurch aufwändige Datenbankabfragen getätigt werden. Die kleine Zahl neben der Eingangsbox ist zwar nützlich, aber erhöht die Serverlast immens. Wenn Sie also im Rahmen einer Optimierung auf die Aktualisierung dieser Information bei jedem Neuladen der Seite verzichten können, verwenden Sie folgende Konstante in der config.php.

define('CONST_SKIP_COUNTER_UPDATE_ON_RELOAD', true);

Gibt es langsame Datenbankstatements oder sogar Deadlocks?

Eine langsame Datenbank ist die häufigste Ursache für langsame Ausführungsgeschwindigkeit. Leider ist hier auch die Optimierung so komplex, dass sie sehr indiviuell durchgeführt werden muss und nicht mit einer allgemeinen Vorgehensweise durchgeführt werden kann. Jedoch kann man zumindest leicht feststellen, ob es Probleme mit der Datenbank gibt.

Hierzu werden im JobRouter alle Abfragen, die eine Laufzeit von 0,5 Sekunden überschreiten, in der Log-Datei output/log/db_<Datum>.log gespeichert. Finden sich vereinzelt solche Abfragen in der Log-Datei, ist das noch kein Grund zur Besorgnis. Je nach Auslastung und Komplexität der Abfrage kann es hin und wieder zu solchen Abfragen kommen. Tritt dieses Problem jedoch gehäuft auf oder kommt es gar zu Deadlocks, deutet dies auf ein Problem mit der Datenbank hin und eine detailliertere Untersuchung erscheint sinnvoll.

Bei Oracle-Systemen mit schwacher Performance kann zusätzlich diese Konstante in der config.php zu einer Verbesserung der Performance führen:

define('CONST_DB_NO_QUERY_TRANSFORMATION', true);

Weitere Einflussfaktoren

Verwenden Sie einen alten Browser?

Insbesondere die Geschwindigkeit der Dialoganzeige wird durch die Verwendung eines alten Browsers (z. B. Internet Explorer 11) negativ beeinflusst. Durch die neueren Entwicklungen moderner Browser werden Webanwendungen mit hohem Skript-Anteil deutlich schneller.

Ist Antivirus- oder andere Schutzsoftware aktiv?

Häufig kommt es zu Performanceproblemen oder Einschränkungen der Funktion, wenn Antivirus- oder Schutzsoftware aktiv ist und den Zugriff auf Dateien und den Netzwerkverkehr überwachen und somit verlangsamen. Die einfachste Möglichkeit, um zu überprüfen, ob eine installierte Software die Geschwindigkeit von JobRouter negativ beeinflusst, ist, diese vorübergehend zu deaktivieren und die Auswirkungen im JobRouter zu testen.

Ist ein Unterschied zu erkennen, können häufig Ausnahmen in der Schutzsoftware für Programme und Verzeichnisse definiert werden - zu nennen wären hier PHP als Anwendung und zusätzlich das Basisverzeichnis des JobRouter-Codes (meist in C:\inetpub\wwwroot) sowie alle ausgelagerten oder verwendeten JobRouter-Verzeichnisse.

Ist ein virtueller Netzwerkadapter aktiv?

Häufig sind Performanceprobleme auf einen virtuellen Netzwerkadapter (VMWare, VirtualBox, Hyper-V, etc.) auf dem JobRouter-Server zurückzuführen. Die einfachste Möglichkeit zur Überprüfung ist das Deaktivieren aller nicht zwingend benötigten Netzwerkadapter. Ein Neustart des Webservers ist meist nicht erforderlich.

Hier kann zusätzlich einen Konstante in der config.php gesetzt werden, die festlegt, welcher der verfügbaren IP-Adressen, für die Lizenzprüfung verwendet werden soll:

define('CONST_LICENSE_IP', '192.168.74.11');

Somit kann vermieden werden, dass eine IP-Adresse, bei der die Auflösung des Hostnamen sehr langsam verläuft, verwendet wird.