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 が多発していたらスラッシングが発生している
メモリが足りなかったら?
メモリを足すか、アプリがメモリを使わないように修正するか
頑張れ