Dialy CheckIn
This commit is contained in:
parent
2ec3b84090
commit
849c179910
4 changed files with 81 additions and 7 deletions
|
@ -4,6 +4,7 @@
|
||||||
# Activate Bash Strict Mode
|
# Activate Bash Strict Mode
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
{
|
{
|
||||||
echo -e "URL\tRuns\tStDev\tMin (ms)\tAvg (ms)\tMax (ms)"
|
echo -e "URL\tRuns\tStDev\tMin (ms)\tAvg (ms)\tMax (ms)"
|
||||||
|
@ -19,9 +20,15 @@ get_statistics() {
|
||||||
local max=0
|
local max=0
|
||||||
local dur=0
|
local dur=0
|
||||||
local durQ=0
|
local durQ=0
|
||||||
|
local spin=0
|
||||||
|
local spiner=('-' '\' '|' '/')
|
||||||
|
|
||||||
|
echo -ne "$1\t "
|
||||||
|
|
||||||
# repeat for the defined counts the url calling
|
# repeat for the defined counts the url calling
|
||||||
for i in $(seq 1 $2); do
|
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
|
local gp=$(($(get_posts $1)/1000000)) # from ns to ms
|
||||||
if [[ $gp -gt $max ]]
|
if [[ $gp -gt $max ]]
|
||||||
then max=$gp
|
then max=$gp
|
||||||
|
@ -38,7 +45,7 @@ get_statistics() {
|
||||||
local stdev=$( echo "sqrt(($durQ / $2) - $avgPow)" | bc )
|
local stdev=$( echo "sqrt(($durQ / $2) - $avgPow)" | bc )
|
||||||
|
|
||||||
# output the statistic values
|
# 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() {
|
get_posts() {
|
||||||
|
@ -50,16 +57,29 @@ get_posts() {
|
||||||
echo $dur
|
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
|
# 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
|
# the Array of the Urls
|
||||||
url_arr=(
|
url_arr=(
|
||||||
"$hostname/index.xhtml"
|
"$hostname/index.xhtml"
|
||||||
"$hostname/view/document/list.xhtml"
|
"$hostname/view/document/list.xhtml"
|
||||||
"$hostname/view/correspondent/list.xhtml"
|
#"$hostname/view/correspondent/list.xhtml"
|
||||||
"$hostname/view/person/list.xhtml"
|
#"$hostname/view/person/list.xhtml"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print_process
|
||||||
|
echo ""
|
||||||
|
|
||||||
# Execute all the URLs for 10 rounds
|
# Execute all the URLs for 10 rounds
|
||||||
main 10 ${url_arr[@]}
|
main 10 ${url_arr[@]}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
print_process
|
||||||
|
|
|
@ -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
|
Nun werden die unterschiedlichen Schichten betrachtet und möglichen Performance-Verbesserungen untersucht und deren
|
||||||
Vor"= und Nachteile herausgearbeitet.
|
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 <jvm-options>-Xmx512m</jvm-options>
|
||||||
|
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}
|
\subsection{Caching im OpenJPA}
|
||||||
\label{sec:performance-checking:investigation-application:caching-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}}
|
\subsection{Caching im \ac{JPA}}
|
||||||
\label{sec:performance-checking:investigation-application:caching-jpa}
|
\label{sec:performance-checking:investigation-application:caching-jpa}
|
||||||
|
|
||||||
|
|
BIN
thesis.pdf
BIN
thesis.pdf
Binary file not shown.
31
thesis.tex
31
thesis.tex
|
@ -128,17 +128,32 @@
|
||||||
% > fmtutil-user --all
|
% > fmtutil-user --all
|
||||||
% > sudo fmtutil-sys --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
|
% Installation Payara mit PostgreSQL
|
||||||
% 1. Mit "yay -S payara" installieren lassen, liegt dann unter /opt/payara
|
% 1. Mit "yay -S payara" installieren lassen, liegt dann unter /opt/payara
|
||||||
% 2. Mit "yay -S postgresql-jdbc" den Datenbanktreiber installieren
|
% 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 <user> payara)
|
% 3. Eigenen Benutzer der Gruppe payara hinzufügen, damit man es direkt von der IDE starten kann (gpasswd -a <user> 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
|
% Konfiguration von Idea
|
||||||
% 1. Neue Payara Server - Local hinzufügen
|
% 1. Neue Payara Server - Local hinzufügen
|
||||||
% 2. Bei Before Lunch "Build artifact" hinzufügen und "WedekindJSF.war" auswählen
|
% 2. Bei Before Lunch "Build artifact" hinzufügen und "WedekindJSF.war" auswählen
|
||||||
% 3. Unter Deployment "Artifact" "WedekindJSF.war" hinzufügen
|
% 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)
|
% 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/
|
% 1. Payara-Server starten, damit man an die Admin-Oberfläche kommt unter http://localhost:4848/
|
||||||
|
@ -164,4 +179,14 @@
|
||||||
% > sudo -i -u postgres
|
% > sudo -i -u postgres
|
||||||
% > psql
|
% > psql
|
||||||
% > CREATE EXTENSION adminpack;
|
% > CREATE EXTENSION adminpack;
|
||||||
% danach sollte der Ping auf der Webseite gehen
|
% 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.
|
Loading…
Reference in a new issue