LoginSignup
2
0

More than 1 year has passed since last update.

【EC2でdocker compose upするときにメモリエラーが出たのでswap領域を確保して対応した】

Posted at

コンテナBuild時にメモリエラーによって、プロセスがkillされてしまうので、なんとかしようと思ってswap領域を確保することにしました。

swap領域とはなにか?

ハードディスクの一部。メモリが不足した際にメモリの内容を一時的に避難させる場所。

メモリの上限以上の処理をできるようにするために存在する。

1,AMIにはswap領域が含まれない

t3.micro インスタンスを使用しているが free -mで確認してもswap領域はない。
デフォルトでswap領域が確保されているインスタンスもあるが今回利用するt3.microにはなかった
BCF09D1F-3AB3-43AE-A221-CF976B619EF5_4_5005_c.jpeg

2,swap領域の確保はEBSでやるかインスタンスストアか?

これはEBSの料金体系がI/O回数によるものだった時代の話をしているようで、今ではインスタンスごとのIOPS性能を超えた分だけ追加料金がかかるようになったため料金は変わらないということです。

こういう歴史を知るのは楽しいです。

インスタンスストアでswap領域の確保ができるのは、デフォルトでインスタンスストアが含まれているインスタンスに限られ、以下でサポートされているインスタンスを確認できます。

ちなみに今回swap領域を確保したかったt3.microはサポートされていませんでした。

3,swap領域を既存のEBSで作成する

free -h で現状のメモリ状況を確認します。

availableが357Mとなっており、すぐに開放可能なキャッシュなどとfreeを合わせると357Mが使える分だ、ということがわかります。
1DAAC80F-0ADC-47AD-B68C-234A4E481746_4_5005_c.jpeg

swap領域を確保するbashスクリプト
source swapon.sh 2048 で2GB分を作成できる。
これをEC2内で実行する。

#!/bin/bash

echo "script="$0
echo "arg count="$#

# MB単位で受け取る 例)2GB=2048
SWAP_COUNT=${1}

sudo dd if=/dev/zero of=/swapfile bs=1M count=${SWAP_COUNT}

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

sudo swapon -s

# sudo 権限で/etc/fstabに書き込み、永続化
sudo sh -c 'echo /swapfile swap swap defaults 0 0 >>/etc/fstab'

以上でコンテナビルド時に出るメモリエラーを解決できました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0