[ERLEDIGT] RAM Managment

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Paktosan
Beiträge: 30
Registriert: 12.06.2012 22:02:12
Lizenz eigener Beiträge: GNU General Public License

[ERLEDIGT] RAM Managment

Beitrag von Paktosan » 26.03.2014 07:25:14

Hallo,
Ich habe momentan einen Debian-VPS mit 8GB RAM auf dem Jenkins, Sonatype Nexus und Teamspeak laufen. Theoretisch reichen 8GB eigentlich, allerdings sind in Leerlauf permanent 5GB belegt, weil Jenkins und Nexus jeweils 2,5GB fressen. Jenkins habe ich per apt installiert und dann eine neue war eingespielt (benutze also das mitgelieferte Daemon-Script), Nexus habe ich von der Website geladen(dessen Script verwende ich auch). Kann ich den RAM-Verbrauch minimieren? Bei Jenkins habe ich es bereits versucht im Script die Option -Xmx2024 zu verwenden, bisher ohne Erfolg.
Hoffe, ihr könnt mir helfen,
Paktosan
Zuletzt geändert von Paktosan am 28.03.2014 07:15:07, insgesamt 1-mal geändert.

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: RAM Managment

Beitrag von storm » 26.03.2014 08:54:43

Ich kenn die Software nicht, die du da einsetzt, aber fressen beide Programme vom Start weg 2.5GB? Natürlich gibt es Wege und Mittel, die RAM-Bedarf einzuschränken (ulimit,cgroups,...), aber dann laufen beide Programme vielleicht nicht mehr optimal. Wenn sonst keine Probleme entstehen, würde ich mir wegen des verwendeten RAMs keine Sorgen machen: besser ist ein ständig genutzter anstatt leerer Speicher.
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

Benutzeravatar
CH777
Beiträge: 1466
Registriert: 27.05.2008 16:37:17

Re: RAM Managment

Beitrag von CH777 » 26.03.2014 10:06:40

Ich glaube du machst da einen ganz weit verbreiteten Denkfehler: Wie storm auch schon schrieb sollte RAM immer möglichst voll sein. Leerer RAM ist völlig nutzlos.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: RAM Managment

Beitrag von rendegast » 26.03.2014 10:25:39

Nach einer trial-Installation (auf einer 4GB-Machine):

Code: Alles auswählen

$ cat nexus-pro-trial-2.7.2-03/bin/nexus.vmoptions
-Xmx768m
-Xms256m
-XX:MaxPermSize=192m
-Djava.net.preferIPv4Stack=true
-Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl
...
Ein './nexus start' macht dann ~ 1000 Threads und belegt nach ein paar Minuten ~ 530M RES.
Setze ich

Code: Alles auswählen

-Xmx1536m
-Xms512m
gibt es 700M - 800M RES
(?) naja, java.
Setze ich

Code: Alles auswählen

-Xmx1536
-Xms768
startet das Ding gar nicht.

<->
Bei Jenkins habe ich es bereits versucht im Script die Option -Xmx2024
'-Xmx2024m' ?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: RAM Managment

Beitrag von wanne » 26.03.2014 12:50:10

Java rechnet beim Speicher irgend wie etwas komisch. Aber bedenke dass die -Xmx Option im Normalfall einfach dzu führt, dass dein Programm halt abgeschossen wird, wenn es mehr speicher braucht. Härtere Limits kannst du mit ulimit -v setzen.
Sonst kannst du am Speichermanagement von java etwas drehen: http://www.oracle.com/technetwork/java/ ... 40523.html Leider hat oracle die Dokumentation ziemlich zerstört. Haben überall in den URLs alles was SUn heißt ersetzen müssen aber die Links nicht angepasst.
Zur Erklärung: Java krallt sich bestenfalls em Anfang ein Stück Speicher und arbeitet dann dadrauf und verwaltet den selbst. Normalerweise wird der dann nu wenn die größe ganz und gar nciht passt vergrößert/verkleinert.

Sonst möchte ioch nochmal stark darauf hinweißen:
CH777 hat geschrieben:Ich glaube du machst da einen ganz weit verbreiteten Denkfehler: Wie storm auch schon schrieb sollte RAM immer möglichst voll sein.
Wenn der platz anderweitig gebraucht wird, kann aufgerämt werden. Oder im Notfall, wenn irgend was tatsächlich von Java unnötig im RAM gehalten wird richtung SWAP verschoben werden. Solange platz da ist, sollte möglcihst alles was geht richtung RAM verschoben werden. Könnte ja sein, dass man das irgend wann mal gebrauchen kann und dann muss man es nicht erst noch in den RAM ziehen.
rot: Moderator wanne spricht, default: User wanne spricht.

Paktosan
Beiträge: 30
Registriert: 12.06.2012 22:02:12
Lizenz eigener Beiträge: GNU General Public License

Re: RAM Managment

Beitrag von Paktosan » 26.03.2014 17:08:44

rendegast hat geschrieben:

Code: Alles auswählen

$ cat nexus-pro-trial-2.7.2-03/bin/nexus.vmoptions
-Xmx768m
-Xms256m
-XX:MaxPermSize=192m
-Djava.net.preferIPv4Stack=true
-Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl
...
Ein './nexus start' macht dann ~ 1000 Threads und belegt nach ein paar Minuten ~ 530M RES.
Setze ich

Code: Alles auswählen

-Xmx1536m
-Xms512m
gibt es 700M - 800M RES
Kannst du vielleicht mal die ganze Datei vorbeischicken, bei mir existiert die nicht...

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: RAM Managment

Beitrag von rendegast » 26.03.2014 17:30:36

Sonst nur auskommentiertes:

Code: Alles auswählen

# cat /home/t/test_nexus/nexus-pro-trial-2.7.2-03/bin/nexus.vmoptions
-Xmx768m
-Xms256m
-XX:MaxPermSize=192m
-Djava.net.preferIPv4Stack=true
-Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl
#-Dcom.sun.management.jmxremote.port=8086
#-Dcom.sun.management.jmxremote.ssl=false
#-Dcom.sun.management.jmxremote.authenticate=false
#-Xdebug
#-Xnoagent
#-Djava.compiler=NONE
#-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#-XX:+HeapDumpOnOutOfMemoryError
, bei mir existiert die nicht...
Liegt vielleicht an der Art der Installation,
einerseits als trial-Version,
zum anderen als normaler Benutzer 'test_nexus' ausgeführt
(mußte dafür ein für test_nexus schreibbares /etc/.java/.systemPrefs/com/ anlegen,
weiterhin ein bin/-Verzeichnis für die Programm-Links nicht angelegt.)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Paktosan
Beiträge: 30
Registriert: 12.06.2012 22:02:12
Lizenz eigener Beiträge: GNU General Public License

Re: RAM Managment

Beitrag von Paktosan » 27.03.2014 07:03:09

Jenkins konnte ich jetzt von 2,5GB auf 1GB bringen und er verhält sich genauso wie vorher. Mit Nexus habe ich allerdings immer noch Probleme: Der ignoriert die nexus.vmoptions einfach. Und in allen anderen config-Dateien finde ich zumindest auch nichts. Wäre ziemlich asozial, wenn das eine Funktion wäre, die man nur in der Pro nutzen kann...

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: RAM Managment

Beitrag von rendegast » 27.03.2014 09:21:24

Wäre ziemlich asozial, wenn das eine Funktion wäre, die man nur in der Pro nutzen kann...
Das Ding ist java, und es sind gewöhnliche java-Parameter.
Du solltest schon wissen, wie dann Parameter in die Commandline "gezaubert" werden können,
wenn Du einen solch harten Vorwurf machst.



Code: Alles auswählen

strace -f -o /tmp/output -e trace=file ./nexust start
Und Du solltest sehen können, ob eine adäquate Datei vielleicht an anderem Ort gesucht wird.
Resp. es steht halt einfach in der Start-Datei:

Code: Alles auswählen

$ cat ./nexus-pro-trial-2.7.2-03/bin/nexus | grep vmopt -C1

read_vmoptions() {
  vmoptions_file=`eval echo "$1" 2>/dev/null`
  if [ ! -r "$vmoptions_file" ]; then
    vmoptions_file="$prg_dir/$vmoptions_file"
....
....

vmoptions_val=""
read_vmoptions "$prg_dir/$progname.vmoptions"
INSTALL4J_ADD_VM_PARAMS="$INSTALL4J_ADD_VM_PARAMS $vmoptions_val"

Der Startbefehl in der OSS-Variante:

Code: Alles auswählen

# grep ^start nexus.oss -A20
start() {
    echo "Starting $APP_LONG_NAME..."
    getpid
    if [ "X$pid" = "X" ]
    then
        # The string passed to eval must handles spaces in paths correctly.
        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP"
        eval $COMMAND_LINE
    else
        echo "$APP_LONG_NAME is already running."
        exit 1
    fi
    getpid
    if [ "X$pid" != "X" ]
    then
        echo "Started $APP_LONG_NAME."
    else
        echo "Failed to start $APP_LONG_NAME."
    fi
}
-> ->

Code: Alles auswählen

WRAPPER_CONF="$NEXUS_HOME/bin/jsw/conf/wrapper.conf"
"asozial"?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Paktosan
Beiträge: 30
Registriert: 12.06.2012 22:02:12
Lizenz eigener Beiträge: GNU General Public License

Re: RAM Managment

Beitrag von Paktosan » 27.03.2014 13:40:38

Also wenn ich einen cat auf dem Startscript mache, bekomme ich folgendes, man könnte auch sagen nichts:

Code: Alles auswählen

nexus@vsrv01:~/nexus-2.7.2-03/bin$ cat nexus | grep vmopt
nexus@vsrv01:~/nexus-2.7.2-03/bin$ 
Einen cat auf den Optionen vom Wrapper bringt mir folgendes, ich glaube allerdings nicht, dass die Optionen dort zu meinem Fall passen, weil ich sehe keinen Hinweis auf die verwendeten 2,5GB:

Code: Alles auswählen

nexus@vsrv01:~/nexus-2.7.2-03/bin/jsw/conf$ cat wrapper.conf | grep memory   
# Size Java memory, in MB (-Xms)
#wrapper.java.initmemory=128
# Size Java memory, in MB (-Xmx). This option only supports a setting up to up to 4000 (4Gb).
#wrapper.java.maxmemory=256
#wrapper.java.initmemory=3
#wrapper.java.maxmemory=64

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: RAM Managment

Beitrag von rendegast » 27.03.2014 17:20:36

... weil ich sehe keinen Hinweis auf die verwendeten 2,5GB:
Na und.
Wie Du siehst sind diese Zeilen auskommentiert '#',
also gibt es keine Vorgabe und die Anwendung entscheidet selbst.

Code: Alles auswählen

# Size Java memory, in MB (-Xms)
#wrapper.java.initmemory=128
# Size Java memory, in MB (-Xmx). This option only supports a setting up to up to 4000 (4Gb).
# If you need more, comment this option out and use an explicit wrapper.java.additional option with -Xmx
#wrapper.java.maxmemory=256
Kommentarzeichen entfernen, Werte festlegen, starten, '[h]top'.
#wrapper.java.initmemory=3
#wrapper.java.maxmemory=64
stammen aus einer angehängten example.conf, siehe Kommentare.

Zur besseren Übersicht empfehle ich statt wrapper.conf einen Link
wrapper.conf.sh -> wrapper.conf
zu bearbeiten, zwecks Syntax-Highlighting.
Die Ausgangsversion sichern, für spätere Vergleiche.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Paktosan
Beiträge: 30
Registriert: 12.06.2012 22:02:12
Lizenz eigener Beiträge: GNU General Public License

Re: RAM Managment

Beitrag von Paktosan » 28.03.2014 07:14:43

Gut, Nexus "zu beschneiden" habe ich jetzt auch geschafft, ich nehme meine Anschuldigung bezüglich Asozialität zurück und erkläre das Thema für Beendet.

Antworten