Wiki-Quellcode von Systemanalyse
Version 2.1 von MACH ProForms GmbH am 24.06.2024
Verstecke letzte Bearbeiter
author | version | line-number | content |
---|---|---|---|
![]() |
1.1 | 1 | ## Systemanalyse |
2 | |||
![]() |
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. |
![]() |
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` | ||
![]() |
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` | ||
![]() |
1.1 | 24 | |
![]() |
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.: |
![]() |
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` | ||
![]() |
2.1 | 40 | 1. Stackdump erzeugen: `jstack <Prozess-ID> > /tmp/$(date +%Y%m%d-%H%M)-stack.txt` |
![]() |
1.1 | 41 | |
![]() |
2.1 | 42 | > {{icon name="far fa-info-circle" size="3"/}} _**Hinweis:**_ |
43 | > | ||
![]() |
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` | ||
![]() |
2.1 | 59 | 1. Heapdump erzeugen: `jmap -dump:live,format=b,file=/tmp/$(date +%Y%m%d-%H%M)-heap.bin <Prozess-ID>` |
![]() |
1.1 | 60 | |
![]() |
2.1 | 61 | > _**Achtung**_ Heapdumps können mehrere Gigabyte groß werden und **personenbezogene Daten** beinhalten. |
![]() |
1.1 | 62 | |
![]() |
2.1 | 63 | > {{icon name="far fa-info-circle" size="3"/}} _**Hinweis:**_ |
64 | > | ||
![]() |
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 | ``` |