swap_pager_getswapspace(nn): failed


自分のためのメモ

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になってます。これらの領域はほぼ均等に使われていくようです。
これでしばらく様子見をすることにしましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です