あるMySQLサーバのロードアベレージが妙に高いなーと思って調査したらスワップしてるじゃありませんか。
同時期に構築した他のMySQLサーバ群の設定と見比べてもおかしいところはないし、topを見ても怪しいプロセスはいなかった。空きメモリも余ってるし・・・。



さらに調査を進めたらこのサーバだけvm.swappiness=0の設定が漏れていました。そういえばこのサーバ、他人に構築を依頼したものだった。人さまに頼んだ仕事はちゃんと事後確認しないとなー。
で、このvm.swappiness=0、DBサーバのときはいつも必ず入れるようにしているんですが、正直今までは「おまじない」としか思ってませんでした。しかし今回の設定ミスのおかげでだいぶ意味があるものだとわかりました。ちなみにvm.swappiness=0の効果なんですが、実メモリを使いきるまでスワップしなくなります(デフォルトはvm.swappiness=60)。

以下、Tips。

vm.swappiness=0の設定

1
2
3
4
5
6
7
8
#  設定ファイルにvm.swappiness=0を追記
vim /etc/sysctl.conf
------------------------
vm.swappiness=0
------------------------

# 設定を反映する
sysctl -p

スワップしたデータをメモリに戻す。

1
2
3
4
5
6
7
8
9
10
11
12
13
# スワップデバイスを確認する。
# ↓のはUsedが0になってるけど、これはTipsのために適当なサーバのコマンドの結果を張っつけてます。
cat /proc/swaps
---------------------------------------------------
Filename Type Size Used Priority
/dev/sda3 partition 2097144 0 -1
---------------------------------------------------

# スワップ領域のデータをメモリにもどす&このswap領域が無効になる(※)
swapoff /dev/sda3

# 無効にしたswap領域を再度有効にする(swapon -aでfstabに書かれたものが有効になる)
swapon -a

以上で完了。

※ swapoffについて
swapoffについて調べると 「swap領域を無効にする」みたいなことが書いてあるけど、実際はスワップ上のデータをメモリにスワップインしてから、swap領域を無効にする動きをします(間違ってたらすみません。カーネルのソースまでは読んでないので。)。なので、swapoffコマンド実行の際、空きメモリサイズ+他のスワップ領域のサイズが不十分だとこのコマンドは失敗します。あ、あと、swapoffコマンド実行の際、負荷が多少上がったりするのでそこは注意を。

 

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

Set your Twitter account name in your settings to use the TwitterBar Section.