Daily CheckIn
This commit is contained in:
parent
058472d1b4
commit
0e8b521f17
6 changed files with 80 additions and 27 deletions
|
@ -10,18 +10,17 @@
|
|||
|
||||
Um die Messungen etwas zu vereinfachen wurde ein Skript erstellt um die Aufrufe gesammelt durchzuführen. Um die
|
||||
Messungen durchzuführen werden die Befehl, wie in \ref{lst:calling_script_exec} dargestellt aufgerufen.
|
||||
Durch die nummerierten Präfixe können im Nachgang über die \textit{pgBadger}"=Berichte die SQL-Abfragen verglichen
|
||||
werden. Wichtig hierbei ist noch, dass vor dem ersten \textit{meascall}-Aufruf überprüft wird, ob die Docker-Container
|
||||
gestartet und initialisiert sind. Wenn dies nicht der Fall ist, laufen die Abfragen ins leere. Am einfachsten ist das
|
||||
über die Statistik von Docker zu ermitteln, ob die CPU-Auslastung auf einen niedrigen Level gefallen ist.
|
||||
Durch die nummerierten Präfixe können im Nachgang über die \textit{pgBadger}"=Berichte die \ac{SQL}"=Abfragen verglichen
|
||||
werden. Wichtig hierbei ist noch, dass vor dem \textit{measrun}-Aufruf überprüft wird, ob die Docker-Container
|
||||
gestartet und initialisiert sind. Wenn dies nicht der Fall ist, laufen die Abfragen ins leere. Am einfachsten ist das,
|
||||
wie dargestellt, über die Statistik von Docker zu ermitteln. Nun wird überwacht, das die CPU-Auslastung auf ein
|
||||
niedriges Level fällt, danach kann das Skript für die Messung gerufen werden.
|
||||
|
||||
\includecode[bash]{chapters/thesis/appendix04_calling_script.sh}{lst:calling_script}{Calling Script}
|
||||
|
||||
\begin{lstlisting}[language=Bash,caption={Aufrufe des Unterstützungsscriptes},label=lst:calling_script_exec]
|
||||
callscript.sh measinit
|
||||
callscript.sh -rppf=_testname measres
|
||||
callscript.sh -rppf=_testname meascall
|
||||
callscript.sh -rppf=_testname -rppn=2 meascall
|
||||
callscript.sh -rppf=_testname -rppn=3 meascall
|
||||
callscript.sh -rppf=_testname -rppn=4 meascall
|
||||
callscript.sh dcstats
|
||||
callscript.sh -rppf=_testname measrun
|
||||
\end{lstlisting}
|
|
@ -12,6 +12,7 @@ script_path="/opt/docker/timing.sh"
|
|||
pgbadger_out="/opt/docker/pgreport"
|
||||
report_postfix=""
|
||||
report_postno=""
|
||||
report_postmax="5"
|
||||
docker_name=dcpgbatch
|
||||
|
||||
COMPOSE_FILE=/opt/docker/docker-compose.yaml
|
||||
|
@ -20,14 +21,33 @@ gflog() {
|
|||
echo "follow the log: $domain_log"
|
||||
tail -f $domain_log
|
||||
}
|
||||
gflogrm() {
|
||||
echo "remove the log: $domain_log"
|
||||
rm "$domain_log"
|
||||
}
|
||||
gfconf() {
|
||||
nvim "$payara_config"
|
||||
}
|
||||
gfscript() {
|
||||
gflogcount=$(cat "$domain_log" | wc -l)
|
||||
outPath=$pgbadger_out$report_postfix/bash.out
|
||||
touch "$outPath"
|
||||
echo "" >>"$outPath"
|
||||
echo "============================================================" >>"$outPath"
|
||||
echo "calling number $report_postno / $report_postmax" >>"$outPath"
|
||||
echo "" >>"$outPath"
|
||||
bash $script_path | tee -a "$outPath"
|
||||
gflastlog=$(cat "$domain_log" | wc -l)
|
||||
gfcnt=$(($gflastlog - $gflogcount))
|
||||
printf "\n%-20s %+5s %+9s %+9s %+9s %+9s\n" "function" "Runs" "Min (ms)" "Avg (ms)" "Max (ms)" "1st (ms)" >>"$outPath"
|
||||
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-create \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-create-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-build \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-buildr-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-loadData \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-loaddt-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-loadDataMap \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-loaddm-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-renderData \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-rdrdat-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-renderLoad \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-rdrlst-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
tail -$gfcnt $domain_log | awk '/PerformanceCounter-render \/view/ { print $3 }' | awk 'BEGIN {min=500;max=0} {sum += $1; cnt += 1}; first == "" { first = $1 }; min > $1 { min = $1 } max < $1 { max = $1 } END { if (cnt < 1) {cnt = -1}; printf("%-20s %5i %9.3f %9.3f %9.3f %9.3f\n", "view-render-list", cnt, min, sum/cnt, max, first) }' >>"$outPath"
|
||||
}
|
||||
|
||||
pginit() {
|
||||
|
@ -68,9 +88,17 @@ pgrpres() {
|
|||
rm -R $pgbadger_out$report_postfix*
|
||||
fi
|
||||
}
|
||||
pgrpout() {
|
||||
echo "Show bash output"
|
||||
outPath=$pgbadger_out$report_postfix/bash.out
|
||||
cat "$outPath"
|
||||
}
|
||||
dccreate() {
|
||||
sudo docker compose -f $COMPOSE_FILE create --force-recreate
|
||||
}
|
||||
dcconf() {
|
||||
nvim $COMPOSE_FILE
|
||||
}
|
||||
dcstart() {
|
||||
sudo docker compose -f $COMPOSE_FILE start
|
||||
sleep 2
|
||||
|
@ -85,11 +113,24 @@ dcres() {
|
|||
dcstats() {
|
||||
sudo docker stats
|
||||
}
|
||||
meascall() {
|
||||
gfscript
|
||||
pgrp
|
||||
pglogrm
|
||||
}
|
||||
measrun() {
|
||||
for i in $(seq 1 $report_postmax); do
|
||||
report_postno=$i
|
||||
meascall
|
||||
done
|
||||
}
|
||||
for name in "$@"; do
|
||||
case $name in
|
||||
-rppf=*) report_postfix="${name#*=}" ;;
|
||||
-rppn=*) report_postno="${name#*=}" ;;
|
||||
-rppm=*) report_postmax="${name#*=}" ;;
|
||||
gflog) gflog ;;
|
||||
gflogrm) gflogrm ;;
|
||||
gfconf) gfconf ;;
|
||||
gfscript) gfscript ;;
|
||||
gfrestart) pgrpinit ;;
|
||||
|
@ -101,7 +142,9 @@ for name in "$@"; do
|
|||
pgrestart) pgrestart ;;
|
||||
pgrp) pgrp ;;
|
||||
pgrpres) pgrpres ;;
|
||||
pgrpout) pgrpout ;;
|
||||
dcinit) dccreate ;;
|
||||
dcconf) dcconf ;;
|
||||
dcstart) dcstart ;;
|
||||
dcstop) dcstop ;;
|
||||
dcres) dcres ;;
|
||||
|
@ -110,6 +153,7 @@ for name in "$@"; do
|
|||
pginit
|
||||
pgrpres
|
||||
pglogrm 0
|
||||
gflogrm
|
||||
dccreate
|
||||
dcstart
|
||||
;;
|
||||
|
@ -117,15 +161,13 @@ for name in "$@"; do
|
|||
dcstop
|
||||
pgrpres
|
||||
pglogrm 0
|
||||
gflogrm
|
||||
dcstart
|
||||
pgrp
|
||||
pglogrm
|
||||
;;
|
||||
meascall)
|
||||
gfscript
|
||||
pgrp
|
||||
pglogrm
|
||||
;;
|
||||
meascall) meascall ;;
|
||||
measrun) measrun ;;
|
||||
help)
|
||||
echo "CALLING: $0 <function> [ <function>]"
|
||||
echo "The overview of the functions of this script."
|
||||
|
@ -136,9 +178,11 @@ for name in "$@"; do
|
|||
echo "*** parameter ***"
|
||||
echo " -rppf=<val> Postfix name for the report-folder (used by gfscript, pgrp, pgrpres, measres, meascall)"
|
||||
echo " -rppn=<val> Postfix number for the report-folder (used by pgrp, measres, meascall)"
|
||||
echo " -rppm=<val> Count of calling meascall (used by measrun)"
|
||||
echo ""
|
||||
echo "*** glassfish ***"
|
||||
echo " gflog Show and follow the log of the glassfish server with $domain_name"
|
||||
echo " gflogrm Remove the log file of the glassfish server with $domain_name"
|
||||
echo " gfconf Open the configuration file from glassfish server"
|
||||
echo " gfscript Calls the testscript for the website"
|
||||
echo ""
|
||||
|
@ -150,19 +194,22 @@ for name in "$@"; do
|
|||
echo " pgconf Open the configuration file from postgresql"
|
||||
echo " pgrestart Restart the postgresql"
|
||||
echo " pgrp Generate the pgbadger report from postgresql log files"
|
||||
echo " pgrpout Show the saved output of the bash scripts"
|
||||
echo " pgrpres Resetet the output of pgbadger"
|
||||
echo ""
|
||||
echo "*** docker ***"
|
||||
echo " dcinit Docker erstellen"
|
||||
echo " dcstart Docker Container starten"
|
||||
echo " dcstop Docker Container stoppen"
|
||||
echo " dcres Docker Container stoppen und loeschen"
|
||||
echo " dcstats Docker live Statistik anzeigen"
|
||||
echo " dcinit Create the both docker container"
|
||||
echo " dcconf Open the configuration file for the docker container"
|
||||
echo " dcstart Start the both docker container"
|
||||
echo " dcstop Stop the both docker container stoppen"
|
||||
echo " dcres Stop and remote the both docker container"
|
||||
echo " dcstats Show the docker live statistik"
|
||||
echo ""
|
||||
echo "*** combine cmds ***"
|
||||
echo " measinit Initialize everthing after start"
|
||||
echo " measres reset data for new measuring"
|
||||
echo " meascall execute one measure"
|
||||
echo " measrun execute <rppm> calls of measure (default: 5 runs)"
|
||||
;;
|
||||
*)
|
||||
echo >&2 "Invalid option $name"
|
||||
|
|
|
@ -65,9 +65,9 @@ weitere Relationen notwendig sind.
|
|||
\includecode[SQL]{chapters/thesis/chapter03_documentlist.sql}{lst:documentlist}{Generische Abfrage der Dokumentenliste}
|
||||
\includecode[SQL]{chapters/thesis/chapter03_documentlist_sub.sql}{lst:documentlist_sub}{Sub-Abfrage pro Dokument}
|
||||
|
||||
Nach aktuellem Stand beinhaltet die Datenbank circa 5400 Briefe, für die jeweils 2-7 eingescannte Faksimile gespeichert
|
||||
werden. Diese Graphik-Dateien werden im TIFF-Format abgespeichert und benötigen zwischen 1 und 80 MB Speicherplatz.
|
||||
Dadurch kommt die Datenbank aktuell auf circa 3,8 GB.
|
||||
Nach aktuellem Stand beinhaltet die Datenbank circa 5400 Briefe, für die jeweils zwei bis sieben eingescannte Faksimile
|
||||
gespeichert werden. Diese Graphik-Dateien werden im TIFF-Format abgespeichert und benötigen zwischen 1 und 80 MB
|
||||
Speicherplatz. Dadurch kommt die Datenbank aktuell auf circa 3,8 GB.
|
||||
|
||||
Wie im Kapitel \ref{ch:basics} dargestellt, besteht die eigentliche Anwendung aus mehreren Schichten. Die
|
||||
PostgreSQL"=Schicht wurde schon im vorherigen Kapitel betrachtet. Daher gehen wir nun weiter nach oben in den Schichten
|
||||
|
|
|
@ -260,6 +260,8 @@ abfragt.
|
|||
\section{Caching im \ac{JPA}}
|
||||
\label{sec:performance-investigation-application:caching-jpa}
|
||||
|
||||
%hier ein test vom acf: \acf{JPA}. aber ich seh ihn nicht
|
||||
|
||||
\mytodos{muss noch umgebaut werden, falsche Konfiguration erwischt}
|
||||
|
||||
%Die Cache-Einstellungen von \ac{JPA} werden über mehrere Einstellungen konfiguriert. Anhand von
|
||||
|
@ -650,11 +652,6 @@ Nach dem Anpassungen haben sich dann die Werte aus \ref{tbl:measure-materialized
|
|||
|
||||
\mytodos{prüfen ob ms oder msec die richtige SI-Einheit ist}
|
||||
|
||||
Bei der Verwendung des Hints \textit{openjpa.FetchPlan.FetchBatchSize} kann die Abfrage enorm verschlechtern. Wenn
|
||||
dieser Wert zu klein oder groß definiert ist, wird die Laufzeit verschlechtert. Bei einem zu großen Wert wird die
|
||||
Laufzeit der Datenbankanfrage auf circa 20 ms verlängert. Wenn der Wert zu gering gewählt ist, dann wird zwar die
|
||||
Laufzeit der Datenbankanfrage minimal verkürzt, aber die \textit{map}"=Funktion wird dadurch verlängert.
|
||||
|
||||
Da bei der Materialized View das laden der Daten und das wandeln in die Java"=Objekte getrennt programmiert wurde,
|
||||
können hier eigene Zeitmessungen für die zwei Schritte eingebaut werden. Hierfür wird die Zeit vor dem
|
||||
\textit{map}"=Aufruf und der \textit{map}"=Aufruf gemessen. Für den ersten Aufruf, wurde ein \textit{SearchDocument}
|
||||
|
@ -665,6 +662,16 @@ erzeugt, noch ohne eine Konvertierung der ermittelten Daten in das Objekt, steig
|
|||
Wenn man nun noch die Konvertierung der Daten wieder einbaut, steigt die Laufzeit nochmal auf nun 82 ms.
|
||||
Dies zeigt, alleine das erzeugen der Objekt kostet die meiste Zeit.
|
||||
|
||||
Bei der Verwendung des Hints \textit{openjpa.FetchPlan.FetchBatchSize} kann die Abfrage enorm verschlechtern. Wenn
|
||||
dieser Wert zu klein oder groß definiert ist, wird die Laufzeit verschlechtert. Bei einem zu großen Wert wird die
|
||||
Laufzeit der Datenbankanfrage auf circa 20 ms verlängert. Wenn der Wert zu gering gewählt ist, dann wird zwar die
|
||||
Laufzeit der Datenbankanfrage minimal verkürzt, aber die \textit{map}"=Funktion wird dadurch verlängert.
|
||||
|
||||
Das aktivieren der Cache-Optionen wie in \ref{sec:performance-investigation-application:caching-openjpa} oder in
|
||||
\ref{sec:performance-investigation-application:caching-query} dargestellt, haben keine Auswirkung auf die Performance.
|
||||
Dies ist dadurch erklärbar, da keine Objekte durch das OpenJPA"=Framework erstellt werden, sondern erst in der
|
||||
\textit{map}"=Funktion des eigenen Codes.
|
||||
|
||||
Nun wird noch geprüft, welche Performance das parsen der Json-Informationen im Server benötigt. Im ersten Schritt wird
|
||||
die Parse-Funktion auskommentiert und die Seite nochmal aufgerufen. Durch diese Umstellung fällt die Laufzeit der
|
||||
Datenermittlung auf circa 4 ms ab. Nun muss noch geprüft werden, welche Zeit nun der Client zum parsen der
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
\chapter*{Abk\"{u}rzungsverzeichnis}
|
||||
|
||||
% Insert your acronyms here (Das Kürzel mit der längsten Bezeichnung sollte in den eckigen Klammern eingetragen werden)
|
||||
\begin{acronym}[API]
|
||||
\begin{acronym}[HTML]
|
||||
\acro{EJB}{Enterprise Java Beans}
|
||||
\acro{JSF}{Java Server Faces}
|
||||
\acro{ORM}{Object Relational Mapping}
|
||||
|
|
BIN
thesis.pdf
BIN
thesis.pdf
Binary file not shown.
Loading…
Reference in a new issue