経緯
1時間半程かかるrspecのテストをJenkinsで実行したところ、途中でJenkinsが落ちてしまった。
再度テスト実行して落ちる寸前でfreeコマンドを確認したところメモリのusedが595(約0.5Gb)になっていたため、メモリが枯渇したのだと思いメモリ開放について調べてみた。
Tl; DR
slabキャッシュの開放
echo 2 > /proc/sys/vm/drop_caches
実行前
$ free -tm
total used free shared buffers cached
Mem: 7884 7289 595 37 474 1699
-/+ buffers/cache: 5115 2768
Swap: 0 0 0
実行後
$ free -tm
total used free shared buffers cached
Mem: 7884 4686 3198 37 475 289
-/+ buffers/cache: 3922 3962
Swap: 0 0 0
freeが595(約0.5Gb)->3198(約3Gb)になりました!
さらに定期実行できるようにcronに設定。
sudo su # rootで実行
crontab -e
# 毎時0分にキャッシュクリア
0 * * * * echo 2 > /proc/sys/vm/drop_caches
Jenkinsのメモリリークについて考察
jenkinsのジョブを実行し続けるとメモリの空きが減ってくる。
おそらくslabキャッシュというkernelがdentry等をキャッシュするために使うメモリ領域が多くなっているため。
slabキャッシュは以下コマンドで開放する。
echo 2 > /proc/sys/vm/drop_caches