2007年04月27日

Linuxのメモリー管理について調べる

専用のWebサーバがあるのですが、昨晩、高負荷で再起動しました。
関係した皆様、ご迷惑をおかけしました。
24時間有人のリブート体制を取ってた。さすが!>サーバ屋

これを機に、Linuxのメモリ管理について調べてみた。
そもそも、今週に入ってから、やたらとメモリの使用量が多かったので。

一番、手っ取り早く確認できるのが、Webminのプロセスマネージャ。


これを見ると、

実メモリ:506M うち、空きが、222M ←半分しか使っていない
スワップ:1G うち空きが、675M ←余裕

つまり、メモリは余裕の余裕ということになる。

しかしながら、サーバ付属のMRTGで見ると、かなり切迫しているように見える。
緑が実メモリで、青ラインがスワップ。


この違いは???

サーバ屋さんによると、MRTGはそれほど正確でないらしいが^^;

そこで、freeコマンドでメモリの使用量を見てみる。

            total       used       free     shared    buffers     cached
Mem:        506736     460908      45828          0      37740     141788
-/+ buffers/cache:     281380     225356
Swap:      1052248     376520     675728

これを見ると、実メモリの空きが45Mしかないように見えるが、どうもそうではないらしい。
あまり、Linuxのメモリ管理のことをわかってないので(汗)

Linux のメモリー管理(メモリ-が足りない?,メモリーリークの検出/防止)

このエントリーを見ると、Linuxのメモリ管理は
・実メモリが不足するとスワップを使う。
・実メモリで空きがあると、それを、キャッシュとして使う。
・実メモリのうち、ほとんど活動していないプログラムはスワップに追い出して、空いたスワップを、キャッシュに使う。
ということ。

実メモリに空きがあれば、出来るだけキャッシュとして使う。しかも、動いていないようなものはスワップに追い出す。たとえ、実メモリが空いてたとしても。う~ん、実に、賢い!

実メモリのうち、そのキャッシュ分を差し引いた数値が、freeの2行目の -/+ buffers/cache: の行になる。ここの空きを見ると225M。Webminの値とほぼ同じ。

そういう使い方なので、Webサーバとして動いている以上、実メモリはほぼフルフルで使っている状態が続く。そう考えると、MRTGの表示もまんざらおかしくもない。

メモリの使い方をチェックするには、vmstat コマンドを使うといいらしい。vmstat 30 とすると、30秒ごとに状況を表示してくれる。余談だが、これを実行しておくと、SSHが切れないのでいい。

だんだん難しい話になってくるが、vmstat の so の項目が継続的に続くのなら、メモリ不足の可能性があるらしいです。

現在の状況


# vmstat 30
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 376500 68496 30380 127848 36 40 104 144 155 142 7 1 87 5
0 0 376500 67472 30496 128648 0 0 27 85 1024 95 9 1 88 2
0 0 376500 67408 30588 128652 0 0 0 80 1011 68 2 1 97 0
0 0 376500 66512 30620 128980 0 0 11 32 1028 74 1 0 98 1
0 0 376500 66512 30724 129328 0 0 11 86 1018 92 9 1 89 1

まったく問題なしです。

2007年04月27日 11:24 | お仕事で使う小物達


トラックバック

このエントリーのトラックバックURL:

コメント

コメントしてください




保存しますか?