Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

EC2でyumがCannot allocate memory

updated on 2019-07-26

EC2でyumが「Cannot allocate memory」になる


問題

AWS EC2 の最低スペック(nano インスタンス)で動かしているマシンがあったのですが、そこで yum update を行ったところ [Errno 5] [Errno 12] Cannot allocate memoryとエラーが出た。


原因

メモリが足りないこと。 AWS EC2 の nano インスタンスなんで500MBぐらいしかない。


エラーへの対処

メモリ不足が原因ですので、メモリを増やしてあげれば解決するのですが、EC2の物理メモリはインスタンスタイプ毎に決められているので物理メモリを増やすことはできない。

そこで、LINUXのしくみで、ディスクをメモリ代わりに使用する仮想メモリというものを追加




fallocate -l 512M /swapfile

これで仮想メモリとして使うスワップファイルを確保します。-l の後には追加する大きさを指定します。


chmod 600 /swapfile

スワップファイルのアクセス権を設定


mkswap /swapfile

仮想メモリとして使うファイルとして指定


swapon /swapfile

仮想メモリを有効にします


以上の手順で swapon failed: Invalid argument というエラーが出てしまう場合は以下の手順をお試しください

まず、先ほど作成した swapfile を削除します。その後以下のコマンドラインを入力してください。(fallocate を dd に変えただけです)


dd if=/dev/zero of=/swapfile count=512000 bs=1K
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile


仮想メモリの追加完了!


以上の操作がエラーなく終わったら改めて yum update

無事にアップデートが完了しました。

仮想メモリの大きさは自由に変更できますので、上記のコマンドの512の部分を適切な数値に変更してお試しください。