AWS EC2 の最低スペックで動かしているマシンがあったのですが、そこで yum update を行ったところ
[Errno 5] [Errno 12] Cannot allocate memory
となってしまいました。
エラーになった原因
あぁ、最低スペックなんでメモリが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の部分を適切な数値に変更してお試しください。