Swap File auf Ubuntu 14.04 bei Amazon AWS EC2 aktivieren
Ein Linux Swap File erlaubt dem Server mehr Speicher zu verwenden, als tatsächlich eingebaut ist. Das hat Vor- und Nachteile. Festplatten (auch SSD's) eines VPS Servers sind deutlich langsamer als der RAM Speicher. Die Server Performance wird bei der permanenten Nutzung eines Swap Files einbrechen. Auf der anderen Seite kann ein Swap File extrem hilfreich sein, wenn der Server ausnahmsweise an seine Speichergrenze kommt.
Ohne aktives Swap File führt das im schlechtesten Fall zum Crash und Serverausfall. Das ist für den SEO und den Unternehmer ein echtes Worst Case Szenario. Besucher bekommen nur eine Error 500 Fehlermeldung zu sehen. Die Besucherzahlen und Umsätze brechen ein, die Bouncerate zurück zu Google steigt sprunghaft.
Blöd ist wenn gerade auch noch AdWords Anzeigen geschaltet werden und zusätzliche Kosten anfallen.
Besser achten wir gleich von Anfang an auf eine solche "Kleinigkeit".
Beim Amazon EC2 Server Template für Ubuntu (12.04 und 14.04) ist nach der Installation noch kein Swap File aktiviert. Anfangs bemerkt man dies evtl. nicht, erst wenn mehr Prozesse auf der Machine laufen, mehrere Domains gehostet werden und Lastspitzen auf den Server kommen. Dann kann die Performance stark einbrechen.
http://aws.amazon.com
Tritt bei der Installation neuer Python Pakete der Fehler "Cannot allocate memory" mit folgender Fehlermeldung auf?
Error [Errno 12] Cannot allocate memory while executing command python setup.py egg_info
Das kann ebenfalls an zu wenig Speicher in Verbindung mit fehlendem Swap-File liegen.
Mit free -m überprüfen wir den vorhandenen Speicher:
$ free -m
Vor dem anlegen eines Swap File's, müssen wir checken ob es bereits eines auf dem VPS Server gibt und es aktiviert ist:
sudo swapon -s
Ein leeres Ergebnis bestätigt: das Swap File fehlt.
$ sudo swapon -s
Filename Type Size Used Priority
Nachdem wir nun wissen, daß kein Swap File auf dem Ubuntu Linux Server vorhanden ist, prüfen wir mit den df Befehl wie viel Festplattenplatz vorhanden ist. Für das Swap File benötigen wir auf kleinen bis mittleren Servern etwa 256MB bis 512MB freien Platz auf der Festplatte /dev/xvda1
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.9G 1.8G 5.8G 24% /
udev 288M 8.0K 288M 1% /dev
tmpfs 60M 184K 59M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 296M 0 296M 0% /run/shm
Aktuell sind 5,8GB verfügbar, genug Platz für das Swap File.
Eine 256MB große Swap Datei wird per dd Kommando erstellt:
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
if=/dev/zero mit dem spezial Device "/dev/zero" besteht die Eingabe aus lauter Nullen
of=/swapfile ist der Dateiname des Swap Files
mit bs=1024 und count=256k wird die Größe festegelgt.
Achtung: bei fehlerhafter Verwendung von dd kann man sich das System schrotten. In den Parametern if und of dürfen auf keinen Fall irgendwelche Leerzeichen sein! Die Verwendung erfolgt wie immer auf eigene Gefahr :-)
Erzeugte Datei als Linux Swap Bereich vorbereiten:
$ sudo mkswap /swapfile
Die Ausgabe dazu:
Setting up swapspace version 1, size = 262140 KiB
no label, UUID=bc9ba5ac-ca06-1814-a231-be36bab3cdf8
Swap Datei aktivieren:
$ sudo swapon /swapfile
Das neue Swap File ist nun sichtbar in der Swap Übersicht:
$ swapon -s
Filename Type Size Used Priority
/swapfile file 262140 0 -1
Jetzt ist das Swap File aktiv, aber nur bis zum nächsten Reboot des Servers. Für eine permanente Aktivierung öffne ich die Datei /etc/fstab:
sudo nano /etc/fstab
und füge folgende Zeile ein:
/swapfile none swap sw 0 0
Mit Swappiness auf 10 gesetzt, verhält sich das Swap File als Notfall Puffer und kann einen Servercrash wegen mangelndem Hauptspeicher verhindern.
Folgende Kommandos erledigen das:
$ echo 10 | sudo tee /proc/sys/vm/swappiness
$ echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
Zuletzt noch die Rechte anpassen, damit das Swapfile nicht für jeden lesbar ist:
$ sudo chown root:root /swapfile
$ sudo chmod 0600 /swapfile
Berechtigung noch prüfen:
$ ls -la /swapfile
-rw------- 1 root root 268435456 Aug 22 12:40 /swapfile
So soll das aussehen. Gut gemacht und Fertig!
Vermutlich liegt es am Design von EC2 in Verbindung mit dem EBS Speicher, speziell dem Typ "Provisioned IOPS (SSD) Volume". Dabei werden die E/A Operationen (Ein- / Ausgabevorgänge) pro Sekunde in Rechnung gestellt. Wenn es nun zu Problemen mit einem Programm kommt und sehr oft auf das Swapfile zugegriffen werden muß können hohe Kosten entstehen. Siehe hierzu: Amazon EBS Preise http://aws.amazon.com/de/ebs/pricing/.
Zur Sicherheit sollte im "CloudWatch" Dashboard eine Kosten-Warnung eingerichtet werden!
Das gilt nicht für EBS Standard-Volumes (SSD). Dieser Speichertyp wird nur anhand der bereitgestellten Menge an GB pro Monat berechnet. Die E/A Leistung ist im Preis enthalten.
Sind Sie bereit für Ihren SEO Erfolg?
Starten Sie mit uns gemeinsam durch.