EC2 Ubuntuイメージにスワップがないのはなぜですか?


82

EC2でいくつかのサーバーを起動しましたが、それらにはスワップがありません。

私は何か間違ったことをしているのですか、それともマシンに何もないのですか?


swaponは/ dev / SDG ...、私はあまりにも不思議に思ったが、私はちょうどEBSのインスタンスを設定し、スワップとしてそれをフォーマットし
トム・オコナー

LinuxシステムでSSDドライブを使用して、SSDドライブでスワップをセットアップしない場合も一般的です。主に一部の人々は妄想的であるため、同じセクターのセットを常にドリルすることにより、SSDのストレージ寿命に悪影響を及ぼします。
-djangofan

1
どのAMIとどのEC2インスタンスのサイズ。AMIはスワップパーティションを使用するように設定する必要があり、インスタンスは起動時に追加する必要があります。
ジェレミーボーズ

可能な限り、使用する必要がないと99%確信していない限り、EC2でスワップを使用しないことをお勧めします(つまり、緊急時にのみ使用します)。一部のEC2インスタンスでスワップを無効にした場合、月々のEBS IOコストはおそらく半分になりました。2セントを節約するためにちょうど2セント-はい、それはひどいものでした。
すみません

また、この手順で見ることができるdocs.aws.amazon.com/AWSEC2/latest/UserGuide/...
Artem.Borysov

回答:


74

そうです、Ubuntu EC2 EBSイメージにはスワップスペースが構成されていません(少なくとも11.04の場合)。「通常の」インスタンスタイプのイメージには、スワップパーティションがありますが、テストしたのは896 MBだけです。

何らかのプロセスが破裂し、スワップスペースがない場合、OOMキラーが起動する前にサーバーがしばらくクロール停止する可能性がありますが、スワップでは単に遅くなります。そのため、十分なRAMがあったとしても、常にスワップスペースが必要です。オプションは次のとおりです。

  • EBSボリューム(RAMのサイズの2〜4倍)を作成し、インスタンスにアタッチし(「メモリ」として/ dev / xvdmを呼び出すのが好きです)、sudo mkswap /dev/xvdmfstabに追加しsudo swapon -aます。 。これは以前に行ったことがあり、正常に動作しますが、おそらくネットワーク経由で実行されるため、インスタンスストアよりも少し遅くなります。

  • または、ディスクのパーティションを再分割してスワップパーティションを追加できる場合がありますが、これには新しいAMIの作成が必要になる場合があります。ルートファイルシステムをアンマウントできず、ディスクデバイス(/ dev / xvda)にもアクセスできず、パーティション(xvda1)にしかアクセスできないため、実行中のインスタンスでこれを実行できませんでした。

  • または、スワップファイルを作成できます。これは今のところ、私の好みのソリューションです。

    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
    

    できた :)多くの人がパーティションの代わりにファイルを使うことに気が進まないことを知っていますが、それは確かに緊急スワップスペースとして十分に機能します。


4
EBSボリュームに交換すると、他の回答で示されるように、追加のコストが発生する可能性があります。スワップを使用しない、またはインスタンスストアへのスワップは、より良いソリューションのように思えます。
isuldor

7
インスタンスストアの使用は、EBSよりも優れたオプションです。EBSはネットワークファイルシステムであるため、他のすべてと同じネットワーク接続を介してEC2インスタンスに接続します。インスタンスストアは、インスタンスをホストしているハードウェアにアタッチされています(そのため、インスタンスを停止および起動しても保持されません)。EBSがスワップのオプションであるのは、インスタンスストレージが付属していないインスタンスタイプを使用しているときだけです。つまり、t1.micro(これは約620MBのRAMしか持っていないため、おそらく緊急を必要とするものです)スワップ)。
ColtonCat

bs = 1Mはすでにバイナリ表記であるため、count = 2048乗数はcount = 2000でなければなりません-私が間違っていなければ。
ypocat

1
2GiBを使用する場合は、1024 * 2048が正しいようです。
ジョー・リス

25

スワップIMHOの最適な場所は、インスタンスストアです。どうして?AWSは、インスタンスストアでのI / Oに対して課金しません。さらに、多くの場合、インスタンスストアはEBSよりもパフォーマンスが高くなります。インスタンスを停止した場合に備えて、スワップファイルを再作成するスクリプトがあることを確認してください。再起動は問題ありません。なんでデフォルトでそこにないの?

インスタンスストアを見つけましょう。

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

万歳、無料で160.1GB!そこにスワップを入れて、EBSベースのスワップが誤って群がった場合、サーバーごとに100ドルの超過を忘れてください。ここで話している不幸な経験。

場合によっては、インスタンスストアが表示されないようです。

インスタンスタイプに応じて、block-device-mappingオプションを使用して、最初にインスタンスストアボリュームをインスタンスにアタッチする必要があります。これを行わないと、/ devの下にデバイスが表示されないこともあります(Amazon EC2で「Instance Store Volumes」ストレージを使用する方法に従って


1
無料利用枠のt1.microユーザーはこのオプションを使用できないことに注意してください。
ルーベンL. 14年

20

:Amazonは価格設定ポリシーを変更し、2016年半ばの時点でI / Oリクエストに課金しません。歴史的な理由から答えはここにありますが、EC2 EBS-backedインスタンスでスワップを使用する(または使用しない)ことによるコストへの影響はありません。


これは仕様です。予期しないコストを回避するために、EC2 EBS-backedインスタンスではデフォルトでスワップがオフになっています。

メモリーを大量に消費する不正なアプリケーション(たとえば、小さなインスタンスまたは小さなインスタンス)がある場合、EBSボリュームで大量のI / O要求が生成される可能性があります。Amazonは、100万のI / Oリクエストごとに0.10ドルを請求します(http://aws.amazon.com/pricing/ebs/を参照)

通常の状況では、心配する必要はありません。通常、小規模なインスタンスでもI / O要求のコストは数ドルです。したがって、適切なサイズのインスタンスがあり、そのスワップがあまり使用されないことがわかっている場合は、先に進んで有効にしてください。ただし、小さなインスタンスには注意してください。

スワップを有効にする場合は、使用状況レポートに注意してください。必要に応じて、CloudWatchコントロールパネルに移動し、合計請求額の新しいアラームを作成して、請求アラートを設定することもできます。この方法ですぐに通知されますが、インスタンスで奇妙なことが起こっています。


最も一般的なインスタンスタイプはSSDボリュームを使用しているため、この答えは少し誤解を招くか混乱させるものです。 aws.amazon.com/ec2/instance-types
テイラーエドミストン16

2
@tedmiston:実際、この答えはもう適用されません。新しい現実を反映するように調整しましたが、基本的にはI / Oリクエストに料金はかかりません。そのため、スワップの有効化(または無効化)は、純粋な技術ベースで行えるようになりました。
グイアンブロス

1

/etc/fstabファイルを確認してください。おそらく、使用しているイメージでスワップなしでセットアップされています。サーバーのスワップなしで実行する人もいると思うのは、合計メモリ以上を使用することは決してないからです。スワップするとすべてが非常に遅くなります。

ただし、メモリ内で膨らむプロセスについては常に妄想しているので、単にスワップドライブをセットアップし、実行中のec2インスタンスからイメージを再作成するのが賢明だと思います。


2
ときどきスワッピングを実行しても、システムの速度は低下しません。
レブシェード

0

実行中に簡単な解決策swapではEC2イメージが実行することであるswapと、圧縮lz4ram持ちますzram-init

  • サービススクリプトはsystemd&で利用できますopenrc

このソリューションは、次のものram取り去りませhost

ここに画像の説明を入力してください


1
非常に創造的ですが、実際のRAMとしてRAMを使用するのは、スワップ用のインメモリファイルシステムとして使用するよりも理にかなっていますか?(主にメモリを使い果たしたときに使用されます)スワップを作成するためにアプリケーションで使用可能なメモリの量を減らすことは直観に反するようです
...-HBruijn

興味深い答えですが、おそらくEBS /インスタンスストアを使用する方が汎用ソリューションとして優れていると思います。512 MBのRAMと正常に動作するEBS上の512 MBのスワップを備えたt2.nanoがあります。
ティム

これは明らかにホスト(EC2インスタンス)からRAMを取得します-RAMはどこから来たのですか?このアプローチの唯一の利点は、RAMの一部を圧縮することですが、SSDをスワップとして使用する機能は提供しません。代わりzswapに、通常のスワップファイル/ディスクの上に圧縮RAMキャッシュを提供するwiki.archlinux.org/index.php/zswapを使用できます。zramの詳細については、cnx-software.com / 2018/05/14 /…を参照してください。
RichVel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.