Neues vom Strato-Server
Über meine Probleme mit dem VServer, auf dem dieses Blog gehostet wird, habe ich ja bereits berichtet. Natürlich habe ich auch auf meine letzte Anfrage keine Antwort mehr bekommen. Vielleicht ist das Verhalten des Servers ja wirklich ein designtechnisch nicht vermeidbarer Fehler in OpenVZ, dass es Situationen geben kann, in denen keine Paging-Mechanismen mehr greifen können, weil z.B. gewisse Speicherbereiche einfach nicht ausgelagert werden können. Aber dann sollte Strato vielleicht nicht OpenVZ verwenden, sondern Xen oder KVM – es gibt ja genug freie Alternativen, mittlerweile. Immerhin hatte man mir ja bei der x-ten Anfrage zum x-ten Mal ein Skript zur Verfügung gestellt, welches die aktuelle Speicherauslastung meines VServers ermittelt – die normalen Linux-Mechanismen zeigen ja die des kompletten Host an:
#!/bin/bash
x=$(cat /proc/user_beancounters |grep privvmpages|awk 'BEGIN{ cur=max=lim=0; }{
cur+=$2;
max+=$3;lim+=$5 } END {print cur*4/1024,max*4/1024,lim*4/1024}')
zugesichert=$(cat /proc/user_beancounters |grep oomguarpages|awk 'BEGIN{
cur=max=lim=0; }{ lim+=$4 }
END { print lim*4/1024}')
momentan=$(echo $x| awk '{print $1}')
maximalgenutzt=$(echo $x| awk '{print $2}')
maximalnutzbar=$(echo $x| awk '{print $3}')
echo "VPS Speichernutzung==>"
echo "Momentan genutzt: $momentan MB"
echo "Zugesichert: $zugesichert MB"
echo "Maximal nutzbar: $maximalnutzbar MB"
Dieses habe ich nun noch etwas erweitert und lasse es via cron jede Minute laufen. Sobald die Auslastung über 250 MB geht, lasse ich Apache und MySQL neu starten, was die Auslastung üblicherweise auf etwa 200 MB senkt. Das mag alles andere als optimal sein, aber es ist immernoch besser als abgeschmierte Dienste, während ich gerade im Zug sitze und nicht eingreifen kann. So lange ich also nicht 10 000 Page Impressions pro Tag habe, und Performance ein Thema wird, scheint diese Lösung dieser Workaround erstmal zu halten.
#!/bin/bash
x=$(cat /proc/user_beancounters |grep privvmpages|awk 'BEGIN{ cur=max=lim=0; }{
cur+=$2;
max+=$3;lim+=$5 } END {print cur*4/1024,max*4/1024,lim*4/1024}')
zugesichert=$(cat /proc/user_beancounters |grep oomguarpages|awk 'BEGIN{
cur=max=lim=0; }{ lim+=$4 }
END { print lim*4/1024}')
momentan=$(echo $x| awk '{print $1}')
maximalgenutzt=$(echo $x| awk '{print $2}')
maximalnutzbar=$(echo $x| awk '{print $3}')
#echo "VPS Speichernutzung==>"
#echo "Momentan genutzt: $momentan MB"
#echo "Zugesichert: $zugesichert MB"
#echo "Maximal nutzbar: $maximalnutzbar MB"
momentan=${momentan%%.*}
zugesichert=${zugesichert%%.*}
if [ "$momentan" -ge "250" ]
then
/etc/init.d/apache2 restart
/etc/init.d/mysql restart
subject="Memory usage > 250 MB -> Services restarted"
mail -s "$subject" email@meinserver.de < /dev/null
else
exit 0
fi
Hallo,
danke für das Script — ich habe genau das gleiche Packet bei Strato (VPowerServer S) und von Strato auf die Frage, wie ich denn meinen realen Speicherverbrauch feststellen kann, nur die dürftige Antwort “Der Speicherverbrauch ist im /proc Verzeichnis in der Datei user_beancounters aufgelistet” bekommen.
Bei mir ist in den vergangenen Wochen öfters der Apache weggekillt worden (hier auch Debian Etch), wohl wegen Speicherverbrauch. Da ich auch viele andere Dienste auf meinem Server laufen habe (ftpd, sshd, imapd/pop3d, smtpd, svnd, rsyncd, …), habe ich etwas an dem Apache (prefork) rumoptimiert, sodass er nun öfter neue Prozesse erzeugt — das minimiert Memoryleak-Auswirkungen auf natürliche Weise, ohne dabei den ganzen Server brutal neustarten zu müssen, wie du das tust. Die relevanten Teile der Apache-Konfiguration habe ich unter http://nopaste.org/p/a8iNrutYN gepastet, falls du daran Interesse hast.
Viele Grüße,
Sven
Interessant, und das funktioniert zuverlässig? Leider kann ich es nicht mehr ausprobieren, ich habe Strato mittlerweile den Rücken gekehrt und hoste nun bei cyon.ch. Das VServer-Gedöns wurde mir zu blöd, ich habe nun ein shared hosting, aber mit ssh-Zugang! :-)