Muninで監視用サーバを構築する1でとあるWebサービスの監視をはじめた。
今の所、このサーバでは問題ない。
問題ない内に問題になりそうな箇所は潰しておけ
ということで、
そもそも各グラフが何を表しているのか?が明確でないのが問題なので、
O'Reilly Japan - 詳解 システム・パフォーマンス
システム・パフォーマンスを片手に各項目について調べてみることにしようかと。
あくまで勉強用のメモみたいなものなので間違いがあるかもしれないことを前提にしてください。
システム・パフォーマンスの本を読むと、
Webアプリが重くなった時はアプリケーション → CPU → メモリの順に疑えというけれど、
アプリケーションは監視対象にないからスルーするとして、
CPUがボトルネックになったことはあまりないので、
メモリから見ていくことにする。
このグラフに触れる前にWebサービスが動いているサーバにリモートアクセスして、
バッファキャッシュやページキャッシュを含めたフリーメモリを返すfreeコマンドを実行してみると、
$ free total used free shared buff/cache available Mem: 8175328 839240 6025992 95084 1310096 6947368 Swap: 8385532 0 8385532
こんな感じ。
明らかにサーバ側の方がオーバースペックですな。
Memはメモリでusedが使用しているメモリ
Swapとはメモリの使用量が限界を越えた時にディスク上にメモリの様に振る舞うスワップファイルを作成して、使用しているメモリをディスクに移行した時のディスク上の容量だと解釈している
上のグラフに戻って、appsというのは、メモリのused(使用量)の値という事で良さそうだ。
page_tablesだけど、
ページというのはOSとCPUが使うメモリの単位で、何かを実行する度にプロセスが生成され、そのプロセスに対してOSが使いたい時にアクセスできるようにアドレスを持つ。
page_tablesにはそれらのアドレスをマッピングしたものをメモリに格納している。
swap_cacheと後の項目のswapはとばして、
次のslab_cacheを見ることにする。
slabというのは、カーネルスラブアロケータというもので、
slab_cacheとうのはカーネルというOSの中核が利用するキャッシュらしい。
そもそもさっきから挙がっているキャッシュって何なの?ということで読んでみると、
限定された量のデータを重複して格納したりバッファリングしたりすることができる高速記憶領域を指す。
要は、CPUが一度実行した結果をキャッシュにして残しておき、
同じ処理を実行しようとした時、残しておいた処理の結果であるキャッシュを読めば、
余計なリソースを使わず、マシンを高速化できるようになる。
バッファは一時データのために使われるメモリ領域。
例えばテキストファイルを開いた時、読み込んだファイルのデータはメモリ上に用意されたバッファに置かれる。
表示されているテキストはファイルではなくバッファにあるデータを表示していて、これを一時データと呼ぶと個人的に解釈している。
unusedはその名の通り、未使用のメモリの量
vmalloc_usedはOSの深いところに入っていくみたいなので、今は触れないでおく。
committed 全プロセスによって確保された仮想メモリの総容量
mapped ページテーブルに登録されている物理メモリの総容量
最後にactiveだけど、
activeはメモリ上にあるページで最近アクセスされたものの総容量で、
inactiveは最近アクセスされていないものの総容量。
メモリが不足しはじめたら、inactiveにあるページから解放される。
これらを踏まえた上で、
改めてこのグラフを見てみるけれども、
やっぱりオーバースペックだ。