Systemanalyse

Zuletzt geändert von MACH ProForms GmbH am 04.07.2024

Systemanalyse

Die MACH formsolutions Plattform wird in verschiedenen Varianten in unterschiedlichsten Systemumgebungen betrieben. Ebenso individuell wie die Installation ist die Nutzung jeden einzelnen Servers durch eine Vielzahl verschiedener Mandanten. Leider kommt es durch diese Vielzahl an Kombinationen gelegentlich zu Problemen, die im Entwicklungsprozess nicht vorhergesagt wurden. Um die Lösung dieser Probleme möglichst zielgerichtet und effizient umzusetzen, bitten wir Sie, uns mit den folgenden Maßnahmen zu unterstützen.

Apache-Access-Log

Mit einer Erweiterung des Access-Logs ist es möglich zu ermitteln, welche Anfragen besonders langsam verarbeitet werden. Dazu muss in der Konfiguration ein neues Log-Format erstellt und referenziert werden, z. B.:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %D" combined_fs
ErrorLog /var/log/apache2/kundenbereich.error.log
CustomLog /var/log/apache2/kundenbereich.access.log combined_fs

Flight Recording

In aktuellen JDK-Versionen kann zur Laufzeit ein- und ausgeschaltet werden, ohne den Ablauf spürbar zu verlangsamen. Dies kann besonders bei der Analyse von Ressourcen-Engpässen und Performance-Problemen helfen.

  1. Prozess-ID des WildFly-Applikationsservers ermitteln: jps
  2. Tracing starten: jcmd <Prozess-ID> JFR.start
  3. Einige Minuten warten.
  4. Trace dumpen: jcmd <Prozess-ID> JFR.dump name=1 filename=/tmp/$(date +%Y%m%d-%H%M).jfr
  5. Trace stoppen: jcmd <Prozess-ID> JFR.stop name=1

Hinweis: Bei einem Docker-basierten System müssen diese Befehle im wildfly-Container ausgeführt und das Ergebnis herauskopiert werden, z. B.:

cd /opt/docker/fs
docker-compose exec wildfly bash
<siehe oben>
exit
docker cp fs_wildfly_1:/tmp/$(date +%Y%m%d-%H%M).jfr .

Stackdump

Um zu prüfen, welche Prozesse in der Anwendung gerade aktiv sind und ggf. nicht korrekt beendet werden, können ein paar Stackdumps mit etwas Zeitversatz herangezogen werden.

  1. Prozess-ID des WildFly-Applikationsservers ermitteln: jps
  2. Stackdump erzeugen: jstack <Prozess-ID> > /tmp/$(date +%Y%m%d-%H%M)-stack.txt

  Hinweis:
Bei einem Docker-basierten System müssen diese Befehle im wildfly-Container ausgeführt und das Ergebnis herauskopiert werden, z. B.:

cd /opt/docker/fs
docker-compose exec wildfly bash
<siehe oben>
exit
docker cp fs_wildfly_1:/tmp/$(date +%Y%m%d-%H%M)-stack.txt .

Heapdump

Sollte ein Problem mit der Speicherauslastung auftreten, kann mittels eines Heapdump festgestellt werden, welche Daten ggf. unabsichtlich den Speicher auslasten.

  1. Prozess-ID des WildFly-Applikationsservers ermitteln: jps
  2. Heapdump erzeugen: jmap -dump:live,format=b,file=/tmp/$(date +%Y%m%d-%H%M)-heap.bin <Prozess-ID>

Achtung Heapdumps können mehrere Gigabyte groß werden und personenbezogene Daten beinhalten.

  Hinweis:
Bei einem Docker-basierten System müssen diese Befehle im wildfly-Container ausgeführt und das Ergebnis herauskopiert werden, z. B.:

cd /opt/docker/fs
docker-compose exec wildfly bash
<siehe oben>
exit
docker cp fs_wildfly_1:/tmp/$(date +%Y%m%d-%H%M)-heap.bin .