AWS上でWordPressを構築していて「504 Gateway Timeout Error」になりました。
調べてみるとALBのターゲットグループのEC2のステータスがunhealthyになっていました。つまり、ALBからEC2インスタンスへの接続がタイムアウトしているわけで、ALBとかドメイン、証明書などではなく、直接的な原因としてはEC2インスタンスの方にありそうだということが分かりました。
EC2インスタンスにログインしてみると
$ service httpd status
httpsプロセスが死んでそうでした。
さらに /var/log/messageを見てみると怪しげなログが・・・。
Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.817719] httpd invoked oom-killer: gfp_mask=0x14201ca(GFP_HIGHUSER_MOVABLE|__GFP_COLD), nodemask=(null), order=0, oom_score_adj=0 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.820420] httpd cpuset=/ mems_allowed=0 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.821403] CPU: 1 PID: 6325 Comm: httpd Not tainted 4.14.106-79.86.amzn1.x86_64 #1 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.823127] Hardware name: Amazon EC2 t3.micro/, BIOS 1.0 10/16/2017 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.824551] Call Trace: Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.825155] dump_stack+0x5c/0x82 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.825924] dump_header+0x94/0x21c Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.826735] ? get_page_from_freelist+0x525/0xba0 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.827777] oom_kill_process+0x223/0x420 Apr 2 09:29:31 ip-172-31-19-188 kernel: [ 4430.828664] out_of_memory+0x296/0x4c0
どうやらサーバーのメモリが足りなくなってout_of_memoryし、oom-killerがhttpdプロセスをkillしたように見えます。つまり根本原因としてはサーバーのメモリ不足が考えられます。
なぜメモリが不足しているのかという部分に関しては過去に
[kanren postid="3778"]
攻撃を受けていて、メモリが枯渇したということがあったので調べてみましたが、怪しそうな攻撃の痕跡は残っていませんでした。
そこで今回、t2.smallからt3.microにインスタンスタイプを変更してメモリが2Gから1Gに減ったということもあったのでswap領域を増やすことにしました。 本当はt3.smallとかにスペック上げればいいってのはあるんですが、コストが2倍くらいになるし、昨日1年分のRI(リザーブドインスタンス)買っちゃったんでなんとかこれで凌ぎたいという思いです・・・。
$ free -m total used free shared buffers cached Mem: 959 821 137 0 7 78 -/+ buffers/cache: 735 223 Swap: 2559 8 2551
これでしばらく様子をみてみたいと思います。
[kanren postid="8918"]