diff --git a/chapters/thesis/appendix02_timing.sh b/chapters/thesis/appendix02_timing.sh index 163d51b..6b6781c 100644 --- a/chapters/thesis/appendix02_timing.sh +++ b/chapters/thesis/appendix02_timing.sh @@ -4,6 +4,7 @@ # Activate Bash Strict Mode set -euo pipefail + main() { { echo -e "URL\tRuns\tStDev\tMin (ms)\tAvg (ms)\tMax (ms)" @@ -19,9 +20,15 @@ get_statistics() { local max=0 local dur=0 local durQ=0 + local spin=0 + local spiner=('-' '\' '|' '/') + + echo -ne "$1\t " # repeat for the defined counts the url calling for i in $(seq 1 $2); do + echo -ne "\b${spiner[$spin]}" + spin=$(( (spin+1) % 4 )) local gp=$(($(get_posts $1)/1000000)) # from ns to ms if [[ $gp -gt $max ]] then max=$gp @@ -38,7 +45,7 @@ get_statistics() { local stdev=$( echo "sqrt(($durQ / $2) - $avgPow)" | bc ) # output the statistic values - echo -e "$1\t$2\t$stdev\t$min\t$avg\t$max" + echo -e "\b$2\t$stdev\t$min\t$avg\t$max" } get_posts() { @@ -50,16 +57,29 @@ get_posts() { echo $dur } +print_process() { + ps -C java --no-headers --format "pid %cpu %mem rss pss cmd" |\ + awk 'BEGIN { printf "%6s %5s %4s %13s %13s %-50s\n", "pid", "%cpu", "%mem", "rss Mb", "pss Mb", "cmd"} + {hr=$4/1024; hp=$5/1024; printf("%6i %5.1f %4.1f %13.2f %13.2f %s\n", $1, $2, $3,hr, hp, $6) }' +} + # the main domain -hostname="https://briefedition.wedekind.h-da.de" +#hostname="https://briefedition.wedekind.h-da.de" +hostname="http://localhost:8080/WedekindJSF-1.0.0" # the Array of the Urls url_arr=( "$hostname/index.xhtml" "$hostname/view/document/list.xhtml" - "$hostname/view/correspondent/list.xhtml" - "$hostname/view/person/list.xhtml" + #"$hostname/view/correspondent/list.xhtml" + #"$hostname/view/person/list.xhtml" ) + +print_process +echo "" # Execute all the URLs for 10 rounds main 10 ${url_arr[@]} + +echo "" +print_process diff --git a/chapters/thesis/chapter04.tex b/chapters/thesis/chapter04.tex index 90f829a..7cc5d23 100644 --- a/chapters/thesis/chapter04.tex +++ b/chapters/thesis/chapter04.tex @@ -29,9 +29,38 @@ prüfen, die den Cache von OpenJPE auswerten} 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 -Xmx512m +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} diff --git a/thesis.pdf b/thesis.pdf index 92e85c6..56bbfb3 100644 Binary files a/thesis.pdf and b/thesis.pdf differ diff --git a/thesis.tex b/thesis.tex index f6a7d04..3a632e3 100644 --- a/thesis.tex +++ b/thesis.tex @@ -128,17 +128,32 @@ % > fmtutil-user --all % > sudo fmtutil-sys --all +% Da ich beim Deployen immer wieder Zugriffsfehler mit "kein Zugriff auf Schema public" hatte, habe ich nochmal folgende Befehle +% auf dem Datenbankserver ausgeführt um alle Rechte zu erteilen (Anlegen des User ausgenommen): +% > sudo -u postgres psql +% > CREATE USER onlineed WITH PASSWORD 'xxxxx'; +% > GRANT ALL ON DATABASE wedeojpa to onlineed; -- diese kommt aus der Wiki, hat aber nicht gereicht +% > GRANT ALL PRIVILEGES ON wedeojpa TO onlineed; +% > \c wedeojpa postgres -- In die Datenbank wedeojpa wechseln unter dem User postgres +% > GRANT ALL ON SCHEMA public TO onlineed; +% nicht um die Rechte dem Benutzer onlineed + % Installation Payara mit PostgreSQL % 1. Mit "yay -S payara" installieren lassen, liegt dann unter /opt/payara % 2. Mit "yay -S postgresql-jdbc" den Datenbanktreiber installieren % 3. Eigenen Benutzer der Gruppe payara hinzufügen, damit man es direkt von der IDE starten kann (gpasswd -a payara) -% über "/opt/payara/bin/asadmin start-domain" kann der Server auch per hand gestartet werden +% über "/opt/payara/bin/asadmin start-domain" kann der Server auch per hand gestartet werden und einem zusätzlichen "-d" +% ist der Debugger aktiv, damit man über die IDE auch remote-debuggen kann (Es kann sein dass am Ende die Domain dazu muss) +% 4. Beim Zugriffsfehler, muss die Log-Datei schreibrechte für die Gruppe zugeordnet werden. Hierfür nachfolgenden +% Befehl im Ordner "/opt/payara/glassfish/domains/domain1/logs" ausführen: +% > sudo chmod g+w -R * % Konfiguration von Idea % 1. Neue Payara Server - Local hinzufügen % 2. Bei Before Lunch "Build artifact" hinzufügen und "WedekindJSF.war" auswählen % 3. Unter Deployment "Artifact" "WedekindJSF.war" hinzufügen -% 4. Sollte es Probleme mit dem Deyploment geben, ala "kann ...Servlet-class nof found" einfach alle target-Verzeichnis löschen und deployen +% 4. Sollte es Probleme mit dem Deployment geben, ala "kann ...Servlet-class nof found" einfach alle target-Verzeichnis löschen +% und erneut deployen oder vielleicht ein Rebuild auf dem Projekt probieren % Konfiguration Glassfish/Payara (Muss scheinbar nach jedem neustart des Rechners gemacht werden) % 1. Payara-Server starten, damit man an die Admin-Oberfläche kommt unter http://localhost:4848/ @@ -164,4 +179,14 @@ % > sudo -i -u postgres % > psql % > CREATE EXTENSION adminpack; -% danach sollte der Ping auf der Webseite gehen \ No newline at end of file +% danach sollte der Ping auf der Webseite gehen + +% Java-Programm +% WedekindEJB beinhaltet die Datenbank-Klassen und den Zugriff in die DB, sowie die TEI Implementierung +% WedekindJSF beinhaltet die WebOberfläche +% Unter de.wedekind sind die Funktionen/Controller zu finden +% Unter webapp findet man die Views +% Unter WEB-INF/layout findet man die Sonder-Elemente wie Footer, Header usw. +% Die Verknüpfung von View zu Controller passiert scheinbar in der viewAction, bei der die Setup-Funktion des Controllers gerufen wird +% bzw. den direkten Aufrufen der Controller-Namen innerhalb von #{}, wobei der erste Buchstabe klein ist +% Der URL-Aufbau wird durch den webapp-Ordner vorgegeben. \ No newline at end of file