[ERLEDIGT] RAM Managment
-
- Beiträge: 30
- Registriert: 12.06.2012 22:02:12
- Lizenz eigener Beiträge: GNU General Public License
[ERLEDIGT] RAM Managment
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
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.
-
- Beiträge: 1581
- Registriert: 01.05.2004 13:21:26
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: DE
Re: RAM Managment
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 */
Re: RAM Managment
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.
Re: RAM Managment
Nach einer trial-Installation (auf einer 4GB-Machine):
Ein './nexus start' macht dann ~ 1000 Threads und belegt nach ein paar Minuten ~ 530M RES.
Setze ich gibt es 700M - 800M RES
(?) naja, java.
Setze ich startet das Ding gar nicht.
<->
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
...
Setze ich
Code: Alles auswählen
-Xmx1536m
-Xms512m
(?) naja, java.
Setze ich
Code: Alles auswählen
-Xmx1536
-Xms768
<->
'-Xmx2024m' ?Bei Jenkins habe ich es bereits versucht im Script die Option -Xmx2024
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: RAM Managment
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:
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:
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.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.
rot: Moderator wanne spricht, default: User wanne spricht.
-
- Beiträge: 30
- Registriert: 12.06.2012 22:02:12
- Lizenz eigener Beiträge: GNU General Public License
Re: RAM Managment
Kannst du vielleicht mal die ganze Datei vorbeischicken, bei mir existiert die nicht...rendegast hat geschrieben:Ein './nexus start' macht dann ~ 1000 Threads und belegt nach ein paar Minuten ~ 530M RES.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 ...
Setze ichgibt es 700M - 800M RESCode: Alles auswählen
-Xmx1536m -Xms512m
Re: RAM Managment
Sonst nur auskommentiertes:
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.)
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
Liegt vielleicht an der Art der Installation,, bei mir existiert die nicht...
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")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
- Beiträge: 30
- Registriert: 12.06.2012 22:02:12
- Lizenz eigener Beiträge: GNU General Public License
Re: RAM Managment
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...
Re: RAM Managment
Das Ding ist java, und es sind gewöhnliche java-Parameter.Wäre ziemlich asozial, wenn das eine Funktion wäre, die man nur in der Pro nutzen kann...
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
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"
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"
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
- Beiträge: 30
- Registriert: 12.06.2012 22:02:12
- Lizenz eigener Beiträge: GNU General Public License
Re: RAM Managment
Also wenn ich einen cat auf dem Startscript mache, bekomme ich folgendes, man könnte auch sagen nichts:
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$ cat nexus | grep vmopt
nexus@vsrv01:~/nexus-2.7.2-03/bin$
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
Re: RAM Managment
Na und.... weil ich sehe keinen Hinweis auf die verwendeten 2,5GB:
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
stammen aus einer angehängten example.conf, siehe Kommentare.#wrapper.java.initmemory=3
#wrapper.java.maxmemory=64
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")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
- Beiträge: 30
- Registriert: 12.06.2012 22:02:12
- Lizenz eigener Beiträge: GNU General Public License
Re: RAM Managment
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.