12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

サーバー増強しようと思ったけどしなくて済んだ話(オーバーコミット機能について)

Last updated at Posted at 2015-08-31

発端

muninのmemoryで「commited」が頻繁に増えるので、サーバーを増強しないといけないんじゃないかって話になった。

でも、muninのcommittedの説明を読むと、
「プログラムに割り当てられたメモリ量。オーバーコミットなら正常で、メモリリークも検出できるよ」(意訳)
って書いてあったので、もしかしたら増強必要ないんじゃね?と思ったのがきっかけ。

オーバーコミット??

  • Linuxのメモリ管理サブシステム。
  • プロセスに対してmallocで仮にメモリを割り当てる。
  • 実メモリより多く割り当てることもある。
  • 実際にプロセスが動く場合は実メモリが割り当てられる。
  • スワップメモリが少ない場合、サーバーシャットダウンの恐れがある。
  • 上記を回避するにはスワップメモリ以上のオーバーコミットは設定しない。

なんでこんな機能があるのか

…よくわからなかった。
とりあえず少ない物理メモリを効率的に使うためのモノらしい。
専門じゃないからわからぬ。

設定を確認する

↓のコマンドを打つ。

sysctl -a | grep vm.over

こんなん返ってくる

vm.overcommit_memory = 0
vm.overcommit_ratio = 50
  • vm.overcommit_memory:オーバーコミットするかどうかの設定(下表参照)
  • vm.overcommit_ratio:vm.overcommit=2のときに使う設定値
項目 内容
0 オーバーコミット有効。
実メモリの大きさまで割り当てる。
1 オーバーコミット有効。
実メモリ以上に割り当てる。
2 オーバーコミット無効。
割り当ては下式のように割り当てる。
(0.5 * RAM) + (overcommit ratio * RAM) = Recommended swap size

※式は公式を参照→Red Hat Customer Portal

結局問題あるのか。

この項は個人的な考察です。

現状の設定内容

現状の設定内容は
* vm.overcommit_memory = 0
* vm.overcommit_ratio = 50

こんな感じ。

実メモリ以上に割り当てない設定なので問題ないんじゃないかなーと思っている。

あるサーバーではmuninのcommittedが高くなるのに別サーバーではそうでもない

あるサーバーではcommittedが何度も実メモリ分までグラフがビンビンしてたけど、
もう片方のサーバーではappのメモリに沿って低めの値になってた。

これに対する予想。

プロセス数の違い?
* 問題がなかったサーバー→約100個のプロセスが常時起動(root/grep除く)
* 問題のあったサーバー→5個ぐらいのプロセスが常時起動(root/grep除く)

ちなみにプロセス数は下記コマンドで確認した。

ps aux |  grep -v "\(root\|grep\)" | wc -l

わからなかったこと。

メモリリークの検出がmuninのcommittedでわかるって書いてあったけど、実際どんな状態になるのかわからん。
メモリリークってプロセスがメモリを解放しない状態のことだから、committedが減っていくってことなのかな…とは思ってる。

全体的に参考にさせていただいたとこ→passingloop • Linux のオーバーコミットについて調べてみた

12
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?