Ich habe ein paar Server auf EC2 gestartet und sie haben keinen Swap.
Mache ich etwas falsch oder haben die Maschinen einfach keine?
Ich habe ein paar Server auf EC2 gestartet und sie haben keinen Swap.
Mache ich etwas falsch oder haben die Maschinen einfach keine?
Antworten:
Sie haben Recht, die Ubuntu EC2 EBS-Images werden ohne konfigurierten Swap-Space ausgeliefert ( mindestens für 11.04 ). Die "normalen" instanzartigen Images haben eine Swap-Partition, obwohl nur 896 MB auf der von mir getesteten Partition vorhanden sind.
Wenn ein Prozess in die Luft geht und Sie keinen Auslagerungsspeicher haben, kann Ihr Server für eine Weile zum Stillstand kommen, bevor der OOM-Killer einsetzt, während es beim Auslagerungsspeicher nur langsam wird. Aus diesem Grund habe ich immer gerne Swap Space, auch mit genügend RAM. Hier sind Ihre Optionen:
Erstellen Sie ein EBS-Volume (2-4 mal so groß wie Ihr RAM), hängen Sie es an Ihre Instanz an (ich nenne es gerne / dev / xvdm für "Speicher") sudo mkswap /dev/xvdm
, fügen Sie es zu fstab hinzu sudo swapon -a
und los geht's . Ich habe das schon einmal gemacht und es funktioniert einwandfrei, aber es ist wahrscheinlich etwas langsamer als der Instanzspeicher, da es über das Netzwerk übertragen wird.
Möglicherweise können Sie Ihre Festplatte neu partitionieren, um eine Auslagerungspartition hinzuzufügen. Dies erfordert jedoch möglicherweise die Erstellung eines neuen AMI. In einer laufenden Instanz war dies nicht möglich, da ich das Root-Dateisystem nicht aushängen kann und nicht einmal auf das Plattengerät (/ dev / xvda), sondern nur auf die Partition (xvda1) zugreifen kann.
Oder Sie können eine Auslagerungsdatei erstellen. Dies ist momentan meine bevorzugte Lösung.
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
sudo chmod 600 /var/swapfile &&
sudo mkswap /var/swapfile &&
echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
sudo swapon -a
Getan. :) Ich weiß, dass es vielen Leuten unangenehm ist, Dateien anstelle von Partitionen zu verwenden, aber es funktioniert auf jeden Fall gut genug als Notfall-Auslagerungsspeicher.
Der beste Ort für den Swap IMHO ist der Instance-Store. Warum? AWS berechnet Ihnen keine I / O-Gebühren für den Instance-Store. Außerdem ist der Instanzspeicher in vielen Fällen leistungsfähiger als EBS. Stellen Sie einfach sicher, dass Sie ein Skript haben, das die Auslagerungsdatei neu erstellt, falls Sie die Instanz stoppen. Neustarts sind in Ordnung. Warum oh, warum ist es nicht standardmäßig da?
Lassen Sie uns den Instanzspeicher lokalisieren.
root@domU-**-**-**-**-**-**:/var/log# fdisk -l
[...]
Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/xvda2 doesn't contain a valid partition table
Hurra, 160.1GB kostenlos! Legen Sie Ihren Swap dort ein und vergessen Sie 100 $ Überschuss pro Server, wenn Ihr EBS-basierter Swap versehentlich überfüllt ist. Unglückliche Erfahrung hier zu reden.
Anscheinend sehen Sie in einigen Fällen den Instance-Store nicht.
Abhängig vom Instanztyp müssen Sie zuerst die Instanzspeicherdatenträger mit den Optionen für die Blockgerätezuordnung an die Instanz anhängen. Wenn Sie dies nicht tun, werden die Geräte möglicherweise nicht einmal unter / dev angezeigt (gemäß Verwendung des Speichers "Instance Store Volumes" in Amazon EC2? ).
Hinweis : Amazon hat seine Preisrichtlinie geändert und erhebt ab Mitte 2016 keine Gebühren für E / A-Anfragen. Die Antwort wird aus historischen Gründen hier aufbewahrt, aber es gibt keine Kostenfolgen bei der Verwendung (oder Nichtverwendung) von Swap auf EC2-EBS-gestützten Instanzen.
Dies ist beabsichtigt. Swap ist bei EC2-EBS-gestützten Instanzen standardmäßig deaktiviert, um unvorhersehbare Kosten zu vermeiden.
Wenn Sie eine speicherhungrige App haben, die nicht mehr funktioniert (z. B. auf einer winzigen oder kleinen Instanz), kann sie eine große Anzahl von E / A-Anforderungen auf Ihrem EBS-Volume generieren. Amazon berechnet 0,10 USD pro 1 Million E / A-Anfragen (siehe http://aws.amazon.com/pricing/ebs/ ) .
Unter normalen Umständen sollten Sie sich darüber keine Sorgen machen. in der Regel betragen die Kosten für I / O-Anfragen auch bei kleineren Instanzen ein paar Dollar, wenn ja. Wenn Sie also wissen, dass Sie eine Instanz mit der richtigen Größe haben und dieser Swap nur selten verwendet wird, aktivieren Sie ihn. Aber sei vorsichtig mit winzigen Instanzen.
Wenn Sie Swap aktivieren, möchten Sie möglicherweise Nutzungsberichte im Auge behalten. Optional können Sie auch einen Abrechnungsalarm einrichten, indem Sie in der CloudWatch-Systemsteuerung einen neuen Alarm für den gesamten Rechnungsbetrag erstellen. Auf diese Weise werden Sie sofort benachrichtigt, was bei Ihren Instanzen seltsam ist.
Überprüfen Sie die /etc/fstab
Datei. Sie wurden wahrscheinlich eingerichtet, ohne das verwendete Image auszutauschen. Ich denke, einige Leute laufen ohne Swap für Server, da sie erwarten, nie mehr als den gesamten Arbeitsspeicher zu verbrauchen - Swap macht alles super langsam.
Ich bin jedoch immer paranoid, wenn es darum geht, einen Prozess im Speicher aufzublähen. Ich halte es daher für ratsam, einfach ein Auslagerungslaufwerk einzurichten und ein Image von der ausgeführten ec2-Instanz neu zu erstellen.
Eine einfache Lösung zum Einspielen swap
von EC2
Bildern besteht darin, swap
komprimiert mit lz4
in ram
mit auszuführen zram-init
.
Diese Lösung ist nicht nehmen ram
weg von den host
:
zswap
, um den komprimierten RAM-Cache über einer normalen Auslagerungsdatei / -platte bereitzustellen : wiki.archlinux.org/index.php/zswap . Weitere Informationen zu zram finden Sie unter cnx-software.com/2018/05/14/….