% !TeX root = ../../thesis.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} Um eine Messung der Performance in der Webseite durchführen zu können, gibt es in \ac{JSF} die Möglichkeit, über eine eigene Implementierung der Klasse \textbf{ViewDeclarationLanguageWrapper} sich in das generieren der Webseite einzuhängen. Hierbei können die Funktionen für das Erstellen, des Bauen und das Rendern der Webseite überschrieben werden. In den überschriebenen Funktionen werden nun Laufzeiten gemessen und die ermittelten Zeiten mit einer Kennung in die Log"=Datei eingetragen. Durch die Kennung, können die Zeiten im Nachgang über ein Script ermittelt und ausgewertet werden. Zusätzlich wird noch eine Implementierung der zugehörigen Factory"=Klasse \textbf{ViewDeclarationLanguageFactory} benötigt. Durch diese Factory"=Klasse wird der eigentlichen Wrapper mit der Performance-Messung in die Bearbeitungsschicht eingehängt. Diese Implementierung wird dann noch in der \textbf{faces-config.xml} eingetragen, wie das in \ref{lst:activate-factory} gezeigt wird, damit die Factory durch das System aufgerufen wird. \begin{lstlisting}[language=xml,caption={Einbindung Factory},label=lst:activate-factory] de.wedekind.utils.VdlLoggerFactory \end{lstlisting} Der Quellcode der Klassen ist im Anhang \ref{ap:jsf_performance_measure} zu finden. Um die Abfragen im \textit{PostgreSQL} untersuchen zu können, ist es am leichtesten, wenn man die Konfiguration so anpasst, dass alle Abfragen mit entsprechenden Zeitmessungen in die Log"=Datei des ausgegeben werden. Zuerst werden über die Einstellungen unter \ref{lst:postgresql_logfile} die Datei und das Format definiert. \begin{lstlisting}[language=yaml,caption={PostgreSQL Dateikonfiguration},label=lst:postgresql_logfile] log_destination = 'jsonlog' logging_collector = on log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_file_mode = 0640 log_rotation_size = 100MB \end{lstlisting} Über die Konfiguration unter \ref{lst:postgresql_logconf} wird definiert welche Werte mit protokolliert werden. Die wichtigste Einstellung ist \textit{log\_min\_duration\_statement}, diese definiert ab welcher Laufzeit eine Abfrage protokolliert werden soll. Mit dem Wert 0 werden alle Abfragen protokolliert. Alle weitere Einstellungen sind so gesetzt, dass nicht unnötige Abfragen für die spätere Auswertung mit \textit{pgBadger} protokolliert werden. \begin{lstlisting}[language=yaml,caption={PostgreSQL Ausgabekonfiguration},label=lst:postgresql_logconf] log_min_duration_statement = 0 log_autovacuum_min_duration = 10 log_checkpoints = off log_connections = on log_disconnections = on log_disconnections = on log_duration = off log_error_verbosity = default log_hostname = on log_lock_waits = on log_statement = 'none' log_temp_files = -1 log_timezone = 'Europe/Berlin' \end{lstlisting}