Swap領域不足でサーバーが落ちる
最近、Swapが足りないエラーが出てサーバーが落ちてしまうことが結構あります。
その時の /var/log/messages には最初はこんな風にある時を境にSwap足りないというメッセージを延々と出し始め、
Oct 1 01:49:53 xxxxxxx kernel: swap_pager_getswapspace(12): failed Oct 1 01:49:53 xxxxxxx kernel: swap_pager_getswapspace(12): failed Oct 1 01:49:53 xxxxxxx kernel: swap_pager_getswapspace(16): failed Oct 1 01:49:53 xxxxxxx kernel: swap_pager_getswapspace(12): failed
そしてそのうち色々なデーモンを殺し始め
Oct 1 02:16:50 xxxxxxx kernel: swap_pager_getswapspace(4): failed Oct 1 02:19:44 xxxxxxx kernel: pid 42921 (mysqld), uid 88, was killed: out of swap space Oct 1 02:20:33 xxxxxxx kernel: pid 742 (clamd), uid 106, was killed: out of swap space
サーバーが落ちます。
こうなると外からsshでも入れず、VPSのコンソールから何とかログインしてリブートかければまた何事もなく動き出すので今まではこれで良しとしてきました。
でも、最近これではダメなくらいSwap不足で落ちる頻度が増してきました。
そこで、とりあえずSwap領域を増やして様子を見ることにしました。(問題の先延ばしとも言う)
現状把握
まずは現状把握。swapinfo でSwap領域の確認をする。
# swapinfo Device 1M-blocks Used Avail Capacity /dev/ada0p2 2048 6 2041 0% #
2GBのSwap領域が確保されてます。これはメモリ2GBの環境でインストーラーお任せでFreeBSDをインストールしたらこうなってました。
昔から、「スワップはメモリの倍の量を確保」と言われてきました。それからするとやはり少なかったのかもしれません。
というか、メモリ2GBが少ないという気もします。ともあれ、昔の言い伝えに従ってもう2GBのSwap領域を追加します。
Swap領域の増やし方
Swap領域の増やし方はここに書いてあります。
11.12. Adding Swap Space
FreeBSD 10.X 以降とそれ以前では増やし方が違うので要注意。
以下、FreeBSD 10.X 以降の場合。
# dd if=/dev/zero of=/var/cache/swapfile bs=1m count=2048
これで適当な場所に2GBのSwapファイルに使う領域をファイルで確保。
# chmod 0600 /var/cache/swapfile
ファイルのパーミッションを設定。
/etc/fstab に以下の行を追加。md99なのは単にmd0のような若い番号を残しておくためで他に意味は無い。
md99 none swap sw,file=/var/cache/swapfile,late 0 0
この後でリブートすればSwap領域が追加されるが、リブートしないですぐに反映させたければ以下のコマンドを打てばOK。
# swapon -aL
増やしたSwap領域の確認
Swap領域が増えてるかを swapinfo で確認。
# swapinfo Device 1M-blocks Used Avail Capacity /dev/ada0p2 2048 0 2048 0% /dev/md99 2048 0 2048 0% Total 4096 0 4096 0% #
元の2GBにちゃんと2GBが追加されて合計4GBになってます。これらの領域はほぼ均等に使われていくようです。
これでしばらく様子見をすることにしましょう。