Out Of Memory(OOM killer)でプロセスを強制に落とされてしまうのをなんとかする。

Out Of Memory(OOM killer)でプロセスを強制に落とされてしまうのをなんとかする。

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
 

さくらインターネットvpsの設定(Debian)カテゴリの最新記事