Linux、CentOSでメモリに余裕、空きが十分あるのにSWAP領域の使用率上昇する要因

LinuxCentOSでメモリに余裕、空きが十分あるのにSWAP領域の使用率上昇する要因関してわかりやすい情報がありました。

 

基本的にSWAP領域って、メモリ不足になった時に使用されるイメージが強いですよね。

 

私もSWAP領域が使用されるのはメモリ不足が原因だと思っていました。

 

実はそれだけではないようです。

 

まず、この辺りが調査でも参考になります。

 

メモリの状況を調べる
メモリの利用状況を調べる方法は, free, top, ps, vmstat, /proc/meminfo 等がある. xosview や ProcMeter を使うと X 上でグラフィカルに状況を見る事ができる. これらでメモリ-の利用状況を調べた場合, 慢性的なメモリ-不足のようにみえて, 戸惑うかも知れない. だが, メモリーが不足しているかどうか, 何が原因か, などの判断は単純にはゆかない.
メモリ-は十分なはずなのに 余裕が無い?
おや? 残りメモリ-が 1.6M(free が 1628) しかない? free の表示単位は 1k ブロックだから, 1.6M の余裕しかないように見える. ピンチなのか?
$ free
             total       used       free     shared    buffers     cached
Mem:        192572     190944       1628      54912      20112     126848
....略
-/+ buffers/chche を見よう
Linux(っていうか UNIX かな?) では, 各プロセスにメモリを割り振った残りを バッファ(buffer)とキャッシュ(cache)に利用して, ディスク入出力の負荷を減らしている. そのため, free コマンド等で見える残りメモリ-(free)は 1M 程度の 瞬間的な使いまわしに対処する程度しか残っていない事が多い.

$ free
             total       used       free     shared    buffers     cached
Mem:        192572     190944       1628      54912      20112     126848
-/+ buffers/cache:      43984     148588  <----ここを見る
Swap:        96384          0      96384
この例では, 実質的な残りメモリ-は, バッファとキャッシュに転用された分も考慮すると free+buffers+cached で計算できる. 上の例で云うと free+buffers+cached = 1628+20112+126848 = 148588. まだまだ, メモリ-には余裕がある.

どのプロセスがメモリを消費しているのか?
個々のプログラムがメモリを浪費しているかどうか, 大雑把に観察する場合どうするか.
free コマンドでは全体のメモリーの使用状況しか分からない. 個々のプロセスのメモリーの使用状況を調べるには top や ps を用いる.

top コマンドを起動してから "M"(大文字) すると消費メモリの順に表示される.
ps コマンドで ps -xl --sort -vsize としても良い.

 

 

そして、肝心のSWAPに関してですが、「活動が少ない部分をメモリから排除して swap に追い出し, バッファやキャッシュに転用する」とあります。

 

メモリ-は十分なはずなのに SWAP を使ってる?
free では swap の使用量も観察できる. 起動後しばらくすると, swap にはみ出しているようにみえる事がある. これは,今あるメモリ-では不足しているという事なのか?

$ free
             total       used       free     shared    buffers     cached
...略
Swap:       151192      48628     102564
swap にはみ出していること自体を気にする人もいるが,要点を取り違えている. 前節でメモリの空きを入出力のバッファとキャッシュに利用していると書いたが, 更に, 活動が少ない部分をメモリから排除して swap に追い出し, バッファやキャッシュに転用する. つまり, 通常, swap を使っているというのは, プログラムやライブラリのうちで実際にはほとんど使われていない部分を, カ-ネルがうまく検出してメモリ-から排除している様子を表しているのだ. これだけでは, メモリ-の不足とは云えない. free コマンドで swap が出ているのもそれだけなら全く問題無しだ.

注: swap とは何か?
PCに載せたメモリでは足りなくなった場合でも, メモリ-の一部をディスクに退避させて計算を続ける事ができる. この様にしてメモリ-の容量を実際よりも大きく見せるメカニズムを仮想メモリという. そのためにディスクにメモリを退避させるための領域を swap という. Linux では swap はディスク領域として取ることもできるし, 通常のファイルの形式で(swap ファイル)確保することもできる.

 

要は人間の癌と一緒で、それ自体が悪ではないということですね。

 

なので、物理メモリが空いていれば、SWAPが多少使用されていても問題はないと判断できます。

 

「参考」

Linux のメモリー管理(メモリ−が足りない?,メモリーリークの検出/防止)(Kodama's tips page)

 

保土ヶ谷電子販売 目覚まし時計 静音 連続秒針 ライト付き 蓄光文字盤 アナログ 白