AWS の EC2 で、t2.nano(メモリ 0.5G) t2.micro(1G) t2.small(2G) などの低スペックのインスタンスタイプを選択して、
WordPress を使っているとシステムログ(/var/log/messages)に Out of memory と表示されたり、
WordPress のトップ画面に「データベース接続確立エラー」などのエラーが表示されてしまう。
これは、メモリ不足によって発生しているので、メモリ容量が大きいインスタンスタイプのプランに変更すれば良いのだが、
お金がかかってしょうがない。しかしスワップ領域を作成しておけば、メインメモリの容量が不足した時に、
データをスワップ領域に対比してくれるのでメモリエラーの発生を回避出来るようになる。
コンピュータ・システムの動作中に,メイン・メモリー(実メモリー)を使い切りそうになり,空き容量が不足した場合,実メモリーから使用中の内容の一部を取り出して退避するためのハード・ディスク上の領域です。Linuxでは,専用の領域としてパーティション作成時に確保します。スワップ領域の容量や使用状況は,freeコマンドで確認できます
システムログエラー
Jun 25 17:04:12 mekou kernel: Out of memory: Kill process 5265 (yum-cron) score 358 or sacrifice child Jun 25 17:04:12 mekou kernel: Killed process 5265 (yum-cron) total-vm:1083852kB, anon-rss:183716kB, file-rss:0kB, shmem-rss:0kB Jun 25 17:04:12 mekou kernel: yum-cron: page allocation failure: order:0, mode:0x2015a Jun 25 17:04:12 mekou kernel: CPU: 0 PID: 5265 Comm: yum-cron Not tainted 3.10.0-514.21.2.el7.x86_64 #1 Jun 25 17:04:12 mekou kernel: Hardware name: Xen HVM domU, BIOS 4.2.amazon 02/16/2017 Jun 25 17:04:12 mekou kernel: 000000000002015a 000000008f5887c9 ffff88001e95ba38 ffffffff81687073 Jun 25 17:04:12 mekou kernel: ffff88001e95bac8 ffffffff81187090 0000000000000000 0000000000000000 Jun 25 17:04:12 mekou kernel: ffffffffffffffff 0002015a00000000 ffff88001e95bac8 000000008f5887c9 Jun 25 17:04:12 mekou kernel: Call Trace: Jun 25 17:04:12 mekou kernel: [<ffffffff81687073>] dump_stack+0x19/0x1b Jun 25 17:04:12 mekou kernel: [<ffffffff81187090>] warn_alloc_failed+0x110/0x180 Jun 25 17:04:12 mekou kernel: [<ffffffff810b1b20>] ? wake_up_atomic_t+0x30/0x30 Jun 25 17:04:12 mekou kernel: [<ffffffff81682c07>] __alloc_pages_slowpath+0x6b7/0x725 Jun 25 17:04:12 mekou kernel: [<ffffffff8118b645>] __alloc_pages_nodemask+0x405/0x420 Jun 25 17:04:12 mekou kernel: [<ffffffff811cf94a>] alloc_pages_current+0xaa/0x170 Jun 25 17:04:12 mekou kernel: [<ffffffff81180bd7>] __page_cache_alloc+0x97/0xb0 Jun 25 17:04:12 mekou kernel: [<ffffffff81183750>] filemap_fault+0x170/0x410 Jun 25 17:04:12 mekou kernel: [<ffffffffa01440af>] xfs_filemap_fault+0x5f/0xf0 [xfs] Jun 25 17:04:12 mekou kernel: [<ffffffff811ac84c>] __do_fault+0x4c/0xc0 Jun 25 17:04:12 mekou kernel: [<ffffffff811acce3>] do_read_fault.isra.42+0x43/0x130 Jun 25 17:04:12 mekou kernel: [<ffffffff811b1471>] handle_mm_fault+0x6b1/0x1040 Jun 25 17:04:12 mekou kernel: [<ffffffff81692c04>] __do_page_fault+0x154/0x450 Jun 25 17:04:12 mekou kernel: [<ffffffff81692f35>] do_page_fault+0x35/0x90 Jun 25 17:04:12 mekou kernel: [<ffffffff8168f148>] page_fault+0x28/0x30 Jun 25 17:04:12 mekou kernel: Mem-Info:
EC2 は、デフォルトでSwap領域が作成されないので、元システム上に空ファイルを作成して、その領域を
Swap 領域として使用する方法を紹介する。
なおお金に余裕があるならストレイジを追加して /dev/xvdf1 を Swap 領域にしていしても良いだろう。
その際は、下記手順の mkswap コマンド以下の手順の /swapfile を /dev/xvdf1 に置き換えて実行すれば良いだろう。
目次
1G の空ファイルを作成
// 空ファイルの作成 # dd if=/dev/zero of=/swapfile bs=1M count=1024 // パーミッションを600に変更 # chmod 600 /swapfile
スワップ領域を作成、有効化
// スワップ領域を作成 # mkswap /swapfile // スワップON (有効) # swapon /swapfile // スワップのステータスを確認する。 # swapon -s Filename Type Size Used Priority /swapfile file 1048572 42872 -1 // スワップOFF(無効) にする場合 # swapoff /swapfile
スワップ領域を再起動時にも有効化
/etc/fstab ファイルに下記行を追加されば、再起動後もスワップ領域が有効になります。
: /swapfile swap swap defaults 0 0