Linuxにはメモリーオーバコミットという仕組みがあり、
実メモリの容量以上のメモリがあることにしておいて、 実際に使われる段階になって実メモリ、仮想メモリから確保する。
この時実際に実メモリも仮想メモリも足りなくなった場合にOOM Killerというヤツが召喚される。
OOM killerが動いてしまうと、幾つかのプロセスを選択し勝手にKillしまくってしまう。
これは良くも悪くもあるので、一旦Swapを今の倍にして様子を見る。
それでもOOM Killerが頻発するようだったらメモリオーバーコミットを無効にして様子を見ようと思う。
この所続いてるVPSの不具合はKVMでのメモリー・オーバーコミットがなんかの具合でう
まくいかない時があるのかもしれないと妄想し、以下をちょつと試してみる。
swap領域はメモリーの2倍用意しておくというのが基本だと思うけど、
僕のVPSプランはメモリ512Mなので もっと余計に取っておこうと思う(VPSなのでメモリー増やせないし)。
インストール時にSwapは1G用意してたけど、さらにもう1Gおまけしておく。
それでもダメならメモリオーバーコミットを無効にしてみる。
ddコマンドで1Gのファイルを作る
dd if=/dev/zero of=/home/swap/swap1GB bs=1024 count=1024000 |
swapファイル作成
mkswap /home/swap/swap1GB |
swapを有効にする
swapon /home/swap/swap1GB |
再起動後も有効にするためfstabに記載する
echo'#Swap File'>>/etc/fstab echo'/home/swap/swap1GB swap swap default 0 0'>>/etc/fstab |
————メモリオーバーコミットを有効にする————
vm.overcommit_memoryを2に設定して、メモリオーバーコミットを有効にする。(再起動後もずっと)
echo '#メモリオーバーコミットを無効にする。'>>/etc/sysctl.conf echo 'vm.overcommit_ratio=99'>>/etc/sysctl.conf echo 'vm.overcommit_memory=0'>>/etc/sysctl.conf |
vm.overcommit_memoryを2に設定して、メモリオーバーコミットを有効にする。(再起動後は無効)
sysctl -w vm.overcommit_ratio=99 sysctl -w vm.overcommit_memory=0 |
————メモリオーバーコミットを無効にする————
vm.overcommit_memoryを2に設定して、メモリオーバーコミットを無効にする。(再起動後もずっと)
echo '#メモリオーバーコミットを無効にする。'>>/etc/sysctl.conf echo 'vm.overcommit_ratio=99'>>/etc/sysctl.conf echo 'vm.overcommit_memory=2'>>/etc/sysctl.conf |
vm.overcommit_memoryを2に設定して、メモリオーバーコミットを無効にする。(再起動後は無効)
sysctl -w vm.overcommit_ratio=99 sysctl -w vm.overcommit_memory=2 |
vm.overcommit_memoryの値
0: 発見的なオーバーコミット (heuristic overcommit) (これがデフォルト)
1: 常にオーバーコミットし、チェックしない。
2: 常にチェックし、オーバーコミットしない。
メモリーの確認
free total used free shared buffers cached Mem: 509036 466224 42812 0 984 27860 -/+ buffers/cache: 437380 71656 Swap: 1939656 94248 1845408 |
現状(8/23)
メモリオーバーコミット(有効)
sysctl -a|grep 'vm.overcommit' vm.overcommit_memory = 0 vm.overcommit_ratio = 99 |
swapon -s Filename Type Size Used Priority /dev/sda5 partition 915664 91388 -1 /home/swap/swap1GB file 1023992 0 -2 |
free total used free shared buffers cached Mem: 509036 495496 13540 0 492 16776 -/+ buffers/cache: 478228 30808 Swap: 1939656 91388 1848268 |
状況(8/25)
今のところノンストップ。ログ等にも異常なし。
Swap1GBだけじゃ足りなかったみたい。+1GBして正解だった。(今のところ・・・)
uptime 21:49:43 up 2 days, 5:31, 1 user, load average: 0.30, 0.17, 0.06 |
vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 48100 14924 2012 42152 0 0 0 5 84 38 0 0 99 1 0 0 48468 31636 1424 28600 0 0 0 0 78 41 0 0 100 0 0 2 48884 4732 672 20464 0 139 147 140 270 117 4 1 53 42 1 1 53572 5888 196 7340 0 1563 992 1571 431 273 5 3 29 63 0 0 61292 14888 304 11800 352 2667 2149 2684 471 286 3 2 89 6 |
調査関連ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1秒間隔でコマンドを実行(上書きされるので履歴は見れない)
watch --interval 1 vmstat |
1秒間隔でコマンドを実行(履歴として表示を残す)
while true;do vmstat;sleep 1;done |
SWAP領域の確認
swapon -s Filename Type Size Used Priority /dev/sda5 partition 915664 107540 -1 |
メモリーの確認
free total used free shared buffers cached Mem: 509036 491924 17112 0 1612 31980 -/+ buffers/cache: 458332 50704 Swap: 915664 107476 808188 |
vmstatを3秒間隔で監視する
vmstat 3 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 142136 13964 964 26180 67 72 128 81 52 38 1 0 97 1 0 0 142136 13956 964 26180 0 0 0 0 74 37 0 0 100 0 0 0 142136 13956 964 26180 0 0 0 0 71 34 0 0 100 0 0 0 142136 13956 968 26180 0 0 1 0 78 40 0 0 100 0 0 0 142136 13956 968 26180 0 0 0 0 68 34 0 0 100 0 0 0 142136 13956 976 26180 0 0 0 5 68 37 0 0 100 0 0 0 142136 13956 976 26180 0 0 0 0 68 35 0 0 100 0 0 0 142136 13956 976 26180 0 0 0 0 67 37 0 0 100 0 0 0 142136 13956 976 26180 0 0 0 0 66 36 0 0 100 0 0 0 142136 13956 976 26180 0 0 0 0 68 34 0 0 100 0 1 0 141072 6140 1024 24064 1108 652 1320 664 445 285 22 2 65 10 0 0 146452 17776 884 26076 340 2032 2665 2032 420 245 7 3 63 26 0 0 146452 17776 892 26096 0 0 0 8 71 38 0 0 100 0 0 0 146452 17776 892 26096 0 0 0 0 76 37 0 0 100 0 0 0 146452 17776 892 26096 0 0 0 0 64 34 0 0 100 0 |