Dialy CheckIn

This commit is contained in:
marcodn 2024-07-10 00:22:25 +02:00
parent 2ec3b84090
commit 849c179910
4 changed files with 81 additions and 7 deletions

View file

@ -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

View file

@ -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 <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}
\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}

Binary file not shown.

View file

@ -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 <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
% 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/
@ -165,3 +180,13 @@
% > psql
% > CREATE EXTENSION adminpack;
% 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.