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