bachelor-thesis/chapters/thesis/chapter04.tex
2024-07-10 00:22:25 +02:00

87 lines
4.2 KiB
TeX

\chapter{Performance-Untersuchung}
\label{ch:performance-checking}
\section{Auswertung des Systems}
\label{sec:performance-checking:system}
\mytodos{Hier die Auswertung des Produktionsservers unterbringen}
\section{Statistiken im PostgreSQL auswerten}
\label{sec:performance-checking:postgresql-statistics}
\mytodos{Logs auswerten, am besten vom Produktionsserver. Ebenfalls sollte man die Webseite
prüfen, die den Cache von OpenJPE auswerten}
\section{Überprüfung des PostgreSQL und Servers}
\label{sec:performance-checking:postgresql-checking}
\mytodos{Konfiguration vom Produktionsserver prüfen}
\section{Einbau und Aktivieren von Performance-Messung}
\label{sec:performance-checking:performance-measure}
\mytodos{Einbau der Messungen direkt in die Webseite bzw. in ein Log}
\section{Untersuchung der Anwendung}
\label{sec:performance-checking:investigation-application}
Nun werden die unterschiedlichen Schichten betrachtet und möglichen Performance-Verbesserungen untersucht und deren
Vor"= und Nachteile herausgearbeitet.
\mytodos{Bei deaktivierten Daten und Query-Cache hat der 3te Aufruf im Durchschnitt schon doppelt so lange gedauert wie
die 2 vorherigen und beim 4ten Aufruf ist der Payara-Server mit einer OutOfMemoryError-Exception im Java-Heapspeicher
ausgestiegen und musste per Kill-Befehl abgeschossen werden.
Angeblich liegt es am der Speicher-Option, in der domain1/config/dommain.xml die Einstellung <jvm-options>-Xmx512m</jvm-options>
gesucht und den Inhalt durch -Xmx4096m ersetzt.
Nach dem ändern der Konfiguration ist der absturz auch nach dem 30 Aufruf des Skriptes nicht reproduzierbar gewesen.
Nach dem zurückstellen auf 512 konnte man den Absturz nach relativ kurze Zeit erneute erzwingen (6ter Aufruf). Der
Arbeitspeicher-Verbraucht der Anwendung lag aber bei ca. 1500MB PSS}
Unterschied RSS und PSS erklären? PSS: non-swapped physical memory + anteiliger shared memory, RSS: non-swapped physical memory + shared memory, siehe man ps: https://man7.org/linux/man-pages/man1/ps.1.html
Bei 10 Aufrufen waren es ca. 50 MB mehr und bei 20 Aufrufen waren es ca. 100 MB mehr Arbeitspeichernutzung.
Nach umstellung auf 4096 ist der Server nach bei ca. 4700 MB RSS ausgestiegen. Aber ohne OutOfMemoryError und der Arbeitspeicher im ganzen war zur Hälfte benutzt.
\subsection{Caching im OpenJPA}
\label{sec:performance-checking:investigation-application:caching-openjpa}
Die Cache-Einstellung von OpenJPA werden über die zwei Einstellungen \texttt{openjpa.DataCache} und
\texttt{openjpa.QueryCache} konfiguriert. Bei beiden Einstellungen kann zuerst einmal über ein einfaches Flag
\textit{true} und \textit{false} entschieden werden ob der Cache aktiv ist. Zusätzlich kann über das Schlüsselwort
\textit{CacheSize} die Anzahl der Elementen im Cache gesteuert werden. Wird diese Anzahl erreicht, dann werden zufällige
Objekte aus dem Cache entfernt und in eine SoftReferenceMap übertragen. Dort
Bei aktivierten Caching benötigt der erste Aufruf ca. 1500 msec, die nachfolgenden liegen um die 250 msec.
\mytodos{pin und unpin noch mit einbringen? SoftReferenceMap nochmal genau durchleuchte, laut doku entfällt dort nichts
wenn kein Timeout auf der Klasse definiert ist}
Kein unterschied feststellbar, nachgeprüft ob die Einstellung richtig deaktiviert sind in der Datei:
domain1/applications/WedekindJSF-1.0.0/WEB-INF/lib/classes/META-INF/persistence.xml
\subsection{Caching im \ac{JPA}}
\label{sec:performance-checking:investigation-application:caching-jpa}
\subsection{Caching in \ac{EJB}}
\label{sec:performance-checking:investigation-application:caching-ejb}
\subsection{Abfragen JPQL}
\label{sec:performance-checking:investigation-application:query-jpql}
\subsection{Abfragen Criteria API}
\label{sec:performance-checking:investigation-application:query-criteria-api}
\subsection{materialized views}
\label{sec:performance-checking:investigation-application:materialized-views}
\subsection{cached queries}
\label{sec:performance-checking:investigation-application:cached-query}
\subsection{Umgestalten der Datenbanktabellen}
\label{sec:performance-checking:investigation-application:new-table}
\subsection{Verkleinerung der Abfragen}
\label{sec:performance-checking:investigation-application:smaller-query}