diff --git a/chapters/thesis/chapter05.tex b/chapters/thesis/chapter05.tex index e657eda..e8a34a6 100644 --- a/chapters/thesis/chapter05.tex +++ b/chapters/thesis/chapter05.tex @@ -22,6 +22,7 @@ Konfigurationsänderung im Payara-Server von \texttt{-Xmx512m} auf \texttt{-Xmx4 ca. 60 Aufrufe des Scripts benötigt, damit der Server nicht mehr reagiert. Hierbei wird aber kein OutOfMemoryError in der Log-Datei protokolliert und der Server verwendet nun ca. 4700 MB RSS. Bei allen Tests war noch mehr als die Hälfte des verfügbaren Arbeitsspeichers unbenutzt. +\mytodos{-Xmx definiert die Größe des Verwendbaren Heapspeichers} Dies zeigt direkt, dass es ein problem in der Freigabe der Objekte gibt, da dass erhöhen des verwendbaren Arbeitsspeicher das Problem nicht löst, sondern nur verschiebt. diff --git a/gfx/Webseite_FrankWedekind.png b/gfx/Webseite_FrankWedekind.png new file mode 100644 index 0000000..a45f7af Binary files /dev/null and b/gfx/Webseite_FrankWedekind.png differ diff --git a/thesis-beamer.pdf b/thesis-beamer.pdf index 1a22d47..29fbd56 100644 Binary files a/thesis-beamer.pdf and b/thesis-beamer.pdf differ diff --git a/thesis-beamer.tex b/thesis-beamer.tex index e40be47..3688192 100644 --- a/thesis-beamer.tex +++ b/thesis-beamer.tex @@ -1,8 +1,9 @@ \documentclass[aspectratio=169]{beamer} +\graphicspath{ {./gfx/} } \input{beamer-config} \usetheme{cleangreen} -\include{marco-galster-config} +\input{marco-galster-config} \addbibresource{expose-ref.bib} % ACHTUNG: Damit sich die Datei sauber im Visual Studio Code übersetzten lässt, muss in den Benutzer-Einstellungen @@ -42,19 +43,34 @@ \addtocounter{framenumber}{-1} \end{frame} +\def\showHorizontalNavBar{True} % -- SLIDES -- -\section{Aufbau} -\begin{frame} - \frametitle{Schichten} +\section{Übersicht} +\begin{frame}[c] + \frametitle{Problemstellung} + \begin{columns} + \column{.5\textwidth} + \centering + \includegraphics[width=0.9\textwidth]{Webseite_FrankWedekind} + \column{.5\textwidth} + \begin{itemize} + \item Eine webbasierte Anwendung der Frank Wedekind Briefedition + \item Performance Problem bei der Abfrage der Briefe sowie der Recherchen der Korrespondenzen + \item entsprechend geringere Akzeptanz der Anwendung + \end{itemize} + \end{columns} +\end{frame} + +\begin{frame}[c] + \frametitle{Ablauf einer Web-Anfrage} \begin{figure}[centered] - \begin{tikzpicture}[scale=.6,transform shape,node distance=4em, + \begin{tikzpicture}[scale=.55,transform shape,node distance=4em, block/.style={rectangle, rounded corners,minimum width=3cm,minimum height=.5cm,text centered, draw=black,fill=green!30}, lineArrow/.style={arrows={-Latex[length=5pt 3 0]}}, every fit/.style={inner sep=.4em,draw} ] - %https://docs.oracle.com/javaee/6/tutorial/doc/bnacj.html \node (browser) [block] {WebBrowser}; \node (fitClient) [rounded corners,fit=(browser)] {}; \node [left] at (fitClient.west) {Client}; @@ -83,26 +99,40 @@ \draw[lineArrow] (memoryBuffers)--(database); \draw[lineArrow] (services)|-(database); \end{tikzpicture} - %\caption{Ablauf einer Web-Anfrage} \label{fig:webrequest} \end{figure} - \end{frame} \section{Untersuchungen} -\begin{frame} - \frametitle{Allgemein} +\begin{frame}[c] + \frametitle{Vorgehen} + \begin{itemize} + \item Vor jeder Messung werden die Container neugestartet und die Startroutinen abgewartet + \item Aufruf eines Bash-Script auf dem gleichen Rechner wie die Docker-Container um die Latenz des Netzwerkes auszuschließen + \item Ermittlung des Speicherbedarfs vor und nach dem Webseitenaufrufen + \item Messung der Aufruf der Index-Seite (ohne Datenbankaufrufe) und der Dokumentenliste, jeweils 10 mal + \item Report über die SQL-Abfragen mit pgBadger erstellen + \end{itemize} +\end{frame} + +\begin{frame}[c] + \frametitle{Voraussetzungen} \begin{itemize} \item Verwendung von Docker, zur Performance-Limitierung \item Eigene Container für die Datenbank und den Webserver \item Für die Untersuchung wird nur die Dokumentenliste beobachtet + \end{itemize} + + \vspace{10pt} + Erste Auffälligkeiten + \begin{itemize} \item OutOfMemory-Ausnahme ausgelöst nach dem vierten Script Aufruf ($\sim$40 Webseitenaufrufe) - \item Vor jeder Messung werden die Container neugestartet und die Startroutinen abgewartet + \item Erhöhung des Java-Heapspeichers von 512MB auf 4096MB hat nur die Anzahl der Aufrufe bis zum Absturz verzögert \end{itemize} \end{frame} -\subsection{Ohne Cache} -\begin{frame} +%\subsection{Ohne Cache} +\begin{frame}[c] \frametitle{Ohne Cache} \begin{columns} \onslide<2->{ @@ -139,8 +169,8 @@ % Hier 2-3 der aktuellen erarbeiten Ansätze Vorstellen und nach dem Warum fragen % Genau beschreiben was Signifikant besser/schlechter ist -\subsection{OpenJPA-Cache} -\begin{frame} +%\subsection{OpenJPA-Cache} +\begin{frame}[c] \frametitle{Caching mit OpenJPA} \begin{columns} \onslide<2->{ @@ -180,13 +210,12 @@ \end{tabular} } \caption{Messung mit OpenJPA-Cache und Größe auf 1000 bzw. 10000} \end{table} - } - \end{columns} + \end{columns} \end{frame} -\subsection{Materialized View} -\begin{frame} +%\subsection{Materialized View} +\begin{frame}[c] \frametitle{Abfragen über materialized views} \begin{columns} \onslide<2->{ @@ -221,86 +250,86 @@ \caption{Messung mit Materialized View} \end{table} } - \end{columns} + \end{columns} \end{frame} \section{Vergleich} -\begin{frame} +\begin{frame}[c] \frametitle{Vergleich} \begin{columns} \column{0.3\textwidth} \centering - \begin{tikzpicture}[scale=.4] - \centering - \begin{axis}[ - title={Laufzeitvergleich Webseitenaufrufe}, - %width=\textwidth,height=\textheight, - xlabel={Aufruf}, - ylabel={Laufzeit [ms]}, - enlargelimits=0.05, - ymin=0, ymax=2100, - xtick={0,1,2,3,4,5}, %Ticks explizit angeben, dass bei grpßerer Darstellung nicht Zwischenticks existieren - ytick={0,500,1000,1500,2000,2500}, - legend pos=north east, - ymajorgrids=true, - grid style=dashed, - ] - \addplot coordinates { (0,2079)(1,623)(2,372)(3,428)(4,357)(5,404) }; - - \addplot coordinates { (0,1853) (1,567)(2,290)(3,254)(4,289)(5,265)}; - - \addplot coordinates { (0,1904) (1,143)(2,126)(3,126)(4,124)(5,114)}; - - \addplot coordinates { (0,808) (1,315)(2,172)(3,151)(4,143)(5,125)}; - - \legend{Ohne Cache,OpenJPA Cache,OpenJPA Cache groß,Materialized View} - \end{axis} - \end{tikzpicture} + \begin{tikzpicture}[scale=.4] + \centering + \begin{axis}[ + title={Laufzeitvergleich Webseitenaufrufe}, + %width=\textwidth,height=\textheight, + xlabel={Aufruf}, + ylabel={Laufzeit [ms]}, + enlargelimits=0.05, + ymin=0, ymax=2100, + xtick={0,1,2,3,4,5}, %Ticks explizit angeben, dass bei grpßerer Darstellung nicht Zwischenticks existieren + ytick={0,500,1000,1500,2000,2500}, + legend pos=north east, + ymajorgrids=true, + grid style=dashed, + ] + \addplot coordinates { (0,2079)(1,623)(2,372)(3,428)(4,357)(5,404) }; + \addplot coordinates { (0,1853) (1,567)(2,290)(3,254)(4,289)(5,265)}; + \addplot coordinates { (0,1904) (1,143)(2,126)(3,126)(4,124)(5,114)}; + \addplot coordinates { (0,808) (1,315)(2,172)(3,151)(4,143)(5,125)}; + \legend{Ohne Cache,OpenJPA Cache,OpenJPA Cache groß,Materialized View} + \end{axis} + \end{tikzpicture} - \begin{tikzpicture}[scale=.4] - \centering - \begin{axis}[ - title={Laufzeitvergleich Datenbankabfragen}, - %width=\textwidth,height=\textheight, - xlabel={Aufruf}, - ylabel={Laufzeit [ms]}, - enlargelimits=0.05, - ymin=0, ymax=60, - xtick={1,2,3,4,5}, %Ticks explizit angeben, dass bei grpßerer Darstellung nicht Zwischenticks existieren - legend pos=north east, - ymajorgrids=true, - grid style=dashed, - ] - \addplot coordinates { (1,30.3)(2,31.5)(3,33.5)(4,33.7)(5,32.9) }; - - \addplot coordinates { (1,28.8)(2,25.8)(3,27.6)(4,27.6)(5,27.6) }; - - \addplot coordinates { (1,20.8)(2,20.5)(3,19.9)(4,21.4)(5,19.7) }; - - \addplot coordinates { (1,3.0)(2,2.2)(3,2.8)(4,2.8)(5,2.4) }; - - \legend{Ohne Cache,OpenJPA Cache,OpenJPA Cache groß,Materialized View} - \end{axis} - \end{tikzpicture} + \begin{tikzpicture}[scale=.4] + \centering + \begin{axis}[ + title={Laufzeitvergleich Datenbankabfragen}, + %width=\textwidth,height=\textheight, + xlabel={Aufruf}, + ylabel={Laufzeit [ms]}, + enlargelimits=0.05, + ymin=0, ymax=60, + xtick={1,2,3,4,5}, %Ticks explizit angeben, dass bei grpßerer Darstellung nicht Zwischenticks existieren + legend pos=north east, + ymajorgrids=true, + grid style=dashed, + ] + \addplot coordinates { (1,30.3)(2,31.5)(3,33.5)(4,33.7)(5,32.9) }; + \addplot coordinates { (1,28.8)(2,25.8)(3,27.6)(4,27.6)(5,27.6) }; + \addplot coordinates { (1,20.8)(2,20.5)(3,19.9)(4,21.4)(5,19.7) }; + \addplot coordinates { (1,3.0)(2,2.2)(3,2.8)(4,2.8)(5,2.4) }; + \legend{Ohne Cache,OpenJPA Cache,OpenJPA Cache groß,Materialized View} + \end{axis} + \end{tikzpicture} + + \pause - \pause \column{0.7\textwidth} \begin{itemize} - \item Keine Start-Phase auf der Datenbank zu erkennen + \item Keine Start-Phase auf der Datenbank zu erkennen, im Gegensatz zur Anwendung \item Die Datenbankabfragen nehmen den kleinsten Teil der Laufzeit ein - \item Materialized View geringste Datenbankabfragezeiten, aber nicht schneller als großen OpenJPA-Cache + \item Materialized View geringste Datenbankabfragezeiten, aber nicht schneller als OpenJPA-Cache mit größerem Cache \end{itemize} - \pause - \begin{block}{Zusammenfassung} - Dies zeigt, die größten Optimierspotenziale sind in der Anwendung versteckt - \end{block} \end{columns} \end{frame} +\begin{frame} + \frametitle{Ausblick} + + \begin{itemize} + \item Größte Optimierungspotenziale sind in der Anwendung vorhanden + \item Ermittlung welcher Teil der Anwendung die meiste Zeit benötigt + \item Weitere Prüfung der anderen Caches + \item Suche des Speicherlecks + \end{itemize} +\end{frame} + % -- SLIDE -- REFERENCES % hier alle Keys aus der BIB einfügen, die mit dargestellt werden sollen \nocite{IbmOpenJPACaching2023,PostgresPro:Chap20.4:2023} -% Für mehreren Seite bei den Referenzen ein ",allowframebreaks" in den [] hinzufügen +%% Für mehreren Seite bei den Referenzen ein ",allowframebreaks" in den [] hinzufügen \begin{frame}[t] \frametitle{Referenzen} \printbibliography[title=Referenzen] diff --git a/thesis.pdf b/thesis.pdf index 27e9c95..d7a6ed5 100644 Binary files a/thesis.pdf and b/thesis.pdf differ