linuxで空きメモリがどんくらいあるか確認する方法


freeコマンドを見る

$ free -m
             total       used       free     shared    buffers     cached
Mem:           497        380        116          0          2        145
-/+ buffers/cache:        233        264
Swap:          511        349        162


-mオプションは、容量をメガバイト単位で表示するオプション
Memが実メモリで、Swapが仮想メモリ

  • total : メモリの総量
  • used : 使用したメモリ寮
  • shard : 共有メモリ → プロセス間で共有できる領域用のメモリらしい
  • buffers : バッファに使われているメモリ
  • cached : ページキャッシュに使われているメモリ

バッファって?


バッファ → 緩衝器、緩衝帯の意
I/Oアクセスする時に、直接I/Oに行くのではなく、キャッシュ経由でアクセスさせる為のメモリ
データが来ているのに受け手が処理できないので、使うはずのデータを貯めておくらしい

ページキャッシュって?


キャッシュ → 隠し場所、貯蔵品
ページキャッシュ → ファイルのデータを入れておいて、再度アクセスがあった時に素早く返す為の領域
1度アクセスがあったファイルは、再度使われる可能性が高いので保持している
また、linuxはメモリに空きがある限りページキャッシュを蓄えるので、Memのfreeが少ないからといって、メモリが足りない訳ではない
アプリにて実メモリが必要になったら、ページキャッシュは破棄されて、アプリにメモリが割り当てられるはず

実際の空き領域はどうやってみるの?


空き領域をチェックするのに必要なのは、上の "-/+ buffers/cache:"
これは、バッファ、キャッシュメモリを引いた値を出していて、使用可能な空き領域を示している

Swapが使われているってことは、メモリが足りないの?


一概にそうとは言えない
linux側で使用していないアプリのメモリをSwapに移して、ページキャッシュに割り当てる場合があるので

それじゃあメモリが足りてるかどうかはどうやって見るの?


まずは、"-/+ buffers/cache"の freeがあからさまに少ない場合
後は、スラッシングが発生しているかチェックする

スラッシング?


メモリ不足の為、Swapと実メモリの行き来が大量に発生して、処理が遅延する現象
vmstatコマンドでチェック可能

$ vmstat -SM 10
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    361      5      1    267    0    0     0     2  987   85  0  0 100  0  0
 0  1    361      5      1    267    0    0   348     0 1024   90  1  2 55 43  0
 0  1    361      5      1    267    0    0   610     3 1128  192  0  3  0 97  0


-SMは、単位をメガバイトにしてるオプション
10 は、10秒毎に表示するオプション


各表示項目の意味は、以下を参照


ここで、si, so が多発していたらスラッシングが発生している

メモリが足りなかったら?


メモリを足すか、アプリがメモリを使わないように修正するか
頑張れ