まるまるこふこふ

数々の次元が崩壊し、全ての生命が塵と化すのを見てきた。私ほどの闇の心の持ち主でも、そこには何の喜びも無かった。

swap領域を設定する

サーバ代節約のため、hubot サーバと開発環境サーバをまとめたら、 mysqld がOOM killer に殺されることがちょくちょく増えたので swap 領域を設定します。

OOM killed されたのを確認

CentOS

$ sudo cat /var/log/messages | grep Killed
Oct 11 18:22:25 kaihatsu kernel: Killed process 29702, UID 27, (mysqld) total-vm:1456776kB, anon-rss:491796kB, file-rss:64kB

優先順位を上げる

/proc/PID/oom_adjに(優先度低)-16から+15(優先度高)の値を設定することで優先度を設定できる。 -17を設定するとOOM Killerの対象外になる。

$ sudo cat /proc/[Process ID]/oom_score 
2000

$ sudo echo -17 > /proc/[Process ID]/oom_adj

$ sudo cat /proc/[Process ID]/oom_score
0

swap領域の確認

$ sudo grep Swap /proc/meminfo
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB

swap 領域の作成

# 2GBのswap領域を作成
dd if=/dev/zero of=/swapfile1 bs=1M count=2048

# パーミッションの変更
chmod 600 /swapfile1

# swap領域用にフォーマット
mkswap /swapfile1

# swap領域を有効化
swapon /swapfile1

# reboot時にswap有効化
echo "/swapfile1 swap swap defaults 0 0" >> /etc/fstab