はじめに
先日awsの格安インスタンスで書いたコードをgithubにコミットしようとした際、OutOfMemoryエラーが吐かれました。
それ以前にもとあるプログラムを実行する際にメモリが足りないエラーを吐かれたことがありました。
格安(無料枠)のインスタンスだとメモリが制限されるので、この様な事がよく起こるのですがスケールアップするのはお金がかかってしまいます。
そこで今回は無料でメモリを増設する方法を記述したいと思います。
スワッピング
お察しの通りスワッピングです。HDDを増設しメモリの様に使う手法のことです。awsでは30GBまで無料枠となっており、ec2インスタンス作成時に8gbは必ずボリューム予約されてしまうので、大体20gb位はボリューム追加出来ることになります。
AWS上の設定
すみません、割愛します。
マウントまで
まずはアタッチしたボリュームが認識されているか確認。
# lsblk
xvda 202:0 0 8G 0 disk
mqxvda1 202:1 0 8G 0 part /
xvdf 202:80 0 20G 0 disk
続いてファイルシステム作成。awsは理由はよく分からないのですがxfsが良いらしいです。
# mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
作成したらマウントする。
# mkdir /data
# mount /dev/xvdf /data/
スワップする
次からスワップ設定を行う。
スワップファイルを作成する。
# touch /data/swapfile
# dd if=/dev/zero of=/data/swapfile bs=1M count=20480
dd: error writing ‘/data/swapfile’: No space left on device
20438+0 records in
20437+0 records out
21429747712 bytes (21 GB) copied, 333.884 s, 64.2 MB/s
# mkswap /data/swapfile
Setting up swapspace version 1, size = 20927484 KiB
no label, UUID=866867a2-0e24-4931-8e84-3830d045fe03
最後にswaponする。
# free -h
total used free shared buff/cache available
Mem: 989M 403M 68M 13M 517M 424M
Swap: 0B 0B 0B
# swapon /data/swapfile
swapon: /data/swapfile: insecure permissions 0644, 0600 suggested.
# free -h
total used free shared buff/cache available
Mem: 989M 420M 79M 13M 489M 408M
Swap: 19G 0B 19G
以上。
コミット用に作成したインスタンスなので直ぐ消すつもりだったのですが、永続化を考えているならfstabファイルとかを編集した方が良いと思います。