Linux(kernel 2.6.32-303 以降)のDBサーバでメモリ16GB、スワップ領域16GBの場合、ざっくりこんな感じが良いかなという妄想メモ。
vm.swapiness=1 vm.overcommit_memory=2 vm.overcommit_ratio=80 vm.min_free_kbytes=524288 vm.extra_free_kbytes=1048576(kernel 3.5以降)
- vm.swappiness=1 でページアウトよりページキャッシュ解放を優先させる。kernel 2.6.32-303 以降、0 にすると OOM Killer が発動しやすくなるらしいので、1 にする。
- vm.overcommit_memory=2 でオーバーコミットしないようにして、OOM Killer が発動しにくくする
- vm.overcommit_ratio=80 で仮想メモリ割当をメモリサイズ + スワップ領域のサイズ * 80% にする。
- vm.min_free_bytes をデフォルト(動的に導出される)より大きめに設定し、余裕を持ってページ回収する。
- 512MB に設定すると、空きメモリが640MB(low pages)を下回ると kswapd がページ回収を開始し、768MB(high pages)を超えるとやめる。空きメモリが 512MB を下回るとプロセスがメモリ要求時に同期でページ回収が実行される(direct reclaim)。
- kernel 3.5 以降なら、vm.extra_free_kbytes を設定して、low pages、high pages に 1GB 加算し direct reclaim が発生しにくくする。
- メモリ使用率監視閾値(アラート)が 90% なら、low pages がメモリの 10%+α くらいにすると良さげな気がする。
と Solaris テイストになりました。
80%、512MB、1GB は割と適当です。
ページ回収まわりでは zone_reclaim_mode も気になるところ。
参考
Systems Performance: Enterprise and the Cloud
- 作者: Brendan Gregg
- 出版社/メーカー: Prentice Hall
- 発売日: 2013/10/26
- メディア: ペーパーバック
- この商品を含むブログを見る
- vm.overcommit_memory = 2 のときに、実際の上限と今現在の値はどこで確認できるか? - (ひ)メモ
- passingloop • Linux のオーバーコミットについて調べてみた
- どうしてメモリはスワップするのか!? - インフラエンジニアway - Powered by HEARTBEATS
- 革命の日々 その2
- Linuxメモリ管理の最先端を探る(1/2) − @IT
- Linuxメモリ管理の最先端を探る(2/2) − @IT
- Performance Tuning Linux Instances on EC2
- Etsukata blog: Hadoop : CPU system 使用率高騰 "zone_reclaim_mode = 1" 編