Wiki-Quellcode von Systemanalyse

Version 2.1 von MACH ProForms GmbH am 24.06.2024

Verstecke letzte Bearbeiter
MACH ProForms GmbH 1.1 1 ## Systemanalyse
2
MACH ProForms GmbH 2.1 3 Das MACH formsolutions 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.
MACH ProForms GmbH 1.1 4
5 ### Apache-Access-Log
6
7 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.:
8
9 ```
10 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %D" combined_fs
11 ErrorLog /var/log/apache2/kundenbereich.error.log
12 CustomLog /var/log/apache2/kundenbereich.access.log combined_fs
13 ```
14
15 ### Flight Recording
16
17 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.
18
19 1. Prozess-ID des WildFly-Applikationsservers ermitteln: `jps`
MACH ProForms GmbH 2.1 20 1. Tracing starten: `jcmd <Prozess-ID> JFR.start`
21 1. Einige Minuten warten.
22 1. Trace dumpen: `jcmd <Prozess-ID> JFR.dump name=1 filename=/tmp/$(date +%Y%m%d-%H%M).jfr`
23 1. Trace stoppen: `jcmd <Prozess-ID> JFR.stop name=1`
MACH ProForms GmbH 1.1 24
MACH ProForms GmbH 2.1 25 _Hinweis_: Bei einem Docker-basierten System müssen diese Befehle im wildfly-Container ausgeführt und das Ergebnis herauskopiert werden, z. B.:
MACH ProForms GmbH 1.1 26
27 ```
28 cd /opt/docker/fs
29 docker-compose exec wildfly bash
30 <siehe oben>
31 exit
32 docker cp fs_wildfly_1:/tmp/$(date +%Y%m%d-%H%M).jfr .
33 ```
34
35 ### Stackdump
36
37 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.
38
39 1. Prozess-ID des WildFly-Applikationsservers ermitteln: `jps`
MACH ProForms GmbH 2.1 40 1. Stackdump erzeugen: `jstack <Prozess-ID> > /tmp/$(date +%Y%m%d-%H%M)-stack.txt`
MACH ProForms GmbH 1.1 41
MACH ProForms GmbH 2.1 42 > {{icon name="far fa-info-circle" size="3"/}} _**Hinweis:**_
43 >
MACH ProForms GmbH 1.1 44 > Bei einem Docker-basierten System müssen diese Befehle im wildfly-Container ausgeführt und das Ergebnis herauskopiert werden, z. B.:
45
46 ```
47 cd /opt/docker/fs
48 docker-compose exec wildfly bash
49 <siehe oben>
50 exit
51 docker cp fs_wildfly_1:/tmp/$(date +%Y%m%d-%H%M)-stack.txt .
52 ```
53
54 ### Heapdump
55
56 Sollte ein Problem mit der Speicherauslastung auftreten, kann mittels eines Heapdump festgestellt werden, welche Daten ggf. unabsichtlich den Speicher auslasten.
57
58 1. Prozess-ID des WildFly-Applikationsservers ermitteln: `jps`
MACH ProForms GmbH 2.1 59 1. Heapdump erzeugen: `jmap -dump:live,format=b,file=/tmp/$(date +%Y%m%d-%H%M)-heap.bin <Prozess-ID>`
MACH ProForms GmbH 1.1 60
MACH ProForms GmbH 2.1 61 > _**Achtung**_ Heapdumps können mehrere Gigabyte groß werden und **personenbezogene Daten** beinhalten.
MACH ProForms GmbH 1.1 62
MACH ProForms GmbH 2.1 63 > {{icon name="far fa-info-circle" size="3"/}} _**Hinweis:**_
64 >
MACH ProForms GmbH 1.1 65 > Bei einem Docker-basierten System müssen diese Befehle im wildfly-Container ausgeführt und das Ergebnis herauskopiert werden, z. B.:
66
67 ```
68 cd /opt/docker/fs
69 docker-compose exec wildfly bash
70 <siehe oben>
71 exit
72 docker cp fs_wildfly_1:/tmp/$(date +%Y%m%d-%H%M)-heap.bin .
73 ```