ひとりになりたい

ノーストレスで生きていく

【俺的備忘録】Oom killerのプロセス停止防ぐ暫定的な回避策

 

あくまで暫定的な対策ですのでご注意を。

 

先日、AWSの無料枠RHELを使ってwebアプリを検証してたところ、いつの間にかwebアプリのプロセスが停止していることに気がつきました。

 

システムログを確認するとOom killerでプロセスが停止されている事が判明。

May 29 01:47:04 ip-10-0-0-123 kernel: Timer-1 invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0

 :

(中略)

 :
May 29 01:47:04 ip-10-0-0-123 kernel: Out of memory: Killed process 1392 (java) total-vm:2982040kB, anon-rss:519536kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1320kB oom_score_adj:0

 

とりあえず動いてもらえればいい環境でしたが、さすがに停止しては困るので対応することに。。

 

結論から言うと、スワップ設定をして回避しました。

 

Oom killerが発生する理由は単純で、単なるメモリ不足。

メモリが不足しているので、システム停止になる前に、必須以外のプロセスを停止することでシステム全体を保護します。

AWSの無料インスタンスはメモリが潤沢ではありません。また、AWSでは基本SWAP設定されていないため、Oom killerに餌食になるようです。

 

とりあえず、スワップを作ります。

 

# swapフォルダを作成します。
sudo mkdir /swap

 

# swap用のファイルを作成します。(2G=1M * 2048)
sudo dd if=/dev/zero of=/swap/swap01_2G bs=1M count=2048

 

# root以外に変更できないように設定。
sudo chmod 600 /swap/swap01_2G

 

# swapファイルの作成
sudo mkswap /swap/swap01_2G

(実行結果)

Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=994d7ad9-d216-4d44-974b-d693ac7f2df4

 

# swapの割り当て
sudo swapon /swap/swap01_2G

 

# swapが見えることを確認
swapon -s

(実行結果)

Filename                                Type            Size    Used    Priority
/swap/swap01_2G                         file            2097148 0       -2

 

# swapが見えることを確認(freeコマンドでも確認)
free

              total        used        free      shared  buff/cache   available
Mem:         825592      105156       53588       12260      666848      589616
Swap:       2097148           0     2097148

 

# 再起動後も有効にできるよう、/etc/fstabに下記行を追記
/swap/swap01_2G    swap    swap    defaults    0    0

 

 

経緯
Oom killer の対処方法でプロセスの優先度を変更するやり方があります。

やり方は簡単で該当プロセスIDを調べて、procフォルダ配下のファイルにechoすればいいのですが、ただ自分の環境だと権限が足らずに、実行できませんでした。

※ec2-userから、Sudo実行したのだがダメでした。。

 

該当のプロセスがJavaだったので、JVM起動動時のメモリ制限をかけてみたものの、oom killerは元気に動いてしまいました。。

根本対策とはならないものの、苦肉の策で、swap設定をやってみたところ、停止しなくなった。と言う感じでした。

 

AWSでケチケチインスタンスを利用するときにはスワップ設定でOom Killerを防ぐのが良いと思われます。

今回恥ずかしながら初めてOmm Killer の存在に気がつく事が出来ました。意外とswapって大事かもしれませんね。