EC2 上で Out of memory, データベース接続確立エラー

LINEで送る
Pocket

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
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

アマゾン

LINEで送る
Pocket

記事が面白かった。為になったと思ったら。下記リンクより商品を購入頂くと筆者は喜び記事を更新致します。


LINEで送る
Pocket

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください