HadoopTimes

ストリーミングアーキテクチャ Apache Kafka とMapR Streams による新しい設計手法
技術情報

MapR クラスター・ノード のメモリ使用量を理解する

メモリ計算には「使用」「フリー」以上のステータスがあります。ここではMapR フレームワークのレポートに沿ってメモリ使用量について手早く見ていきましょう。

MapR フレームワークは、メモリマネージャより伝えられる2種類の数値に基づいて、ノードのメモリ使用量を表示します。GUI/CLI内で表示されるメモリ使用量の基本となるこの数値を見るには、「フリー」コマンドを起動します。

aeng@mynode ~$ free
 Total used  free shared buffer cached
 Mem: 65980752 39015488 26965264 0 336352 12910612
 -/+ buffers/cache: 25768524 40212228
 Swap: 64434300 0 64434300
 aeng@mynode ~$

この例を見ると、マシンのメモリは約64GBあり、現在使われているメモリが39GB(59%)であることがメモリマネージャのレポートからわかります。しかし、「使用」と「フリー」以外のステータスが存在します。メモリマネージャは複数の階層構造からなっており、上の出力層で現状「フリー」と表示されるメモリ量は、必ずしも、プロセスの使用に必要な時のメモリ量ではありません。上の例でいえば、フリーのバッファ/キャッシュ40GBと同じくフリーのメモリが26GBあります。これを足すと64GB以上になります。メモリの計算には使用/フリーのほかにもステータスがあることが明白となりました。

例を挙げると、メモリマネジャーからメモリを10GB必要とするアプリケーションを使用することになりました。アプリケーションを実行して後、フリーのメモリは8GBあると表示されました。アプリケーションから見れば使用していたのはたったの2GBだけなのに、メモリマネージャから見ると、依然10GB使用しているとの計算がでています。この例を理解しようとする際に重要なのは、あるアプリケーションにはいくらか「フリー」なメモリがあるというだけでなく、メモリマネージャは他のプロセスが使用する分のメモリを回すのに必要なステップをすぐに完了させるするわけではないということです。

ファイルの削除プロセスを考えるとイメージしやすいと思います。ファイル削除の最初のステップは、ユーザーが今後もうファイルを見ないよう、親ディレクトリからのエントリーを削除することです。しかし、ディスクブロックが実際に領域未割りあてになるまでは、その分のディスクはその他のファイルで使用されません。

この事例はクラスター・ノードのメモリ管理にもある程度当てはまります。MapR フレームワークから報告されたメモリ使用量が変に映る場合は、ノードにログインして「フリー」を実行し、メモリがどのように使用されているか見てください。MapR フレームワークの目的は有益な情報を集めることですが、メモリマネージャ/割り当てが複雑なため、詳細な数値すべてををパーセンテージ表し、GUIで表示することは不可能です。ノードにログインしてチェックすれば、メモリが本当に使用されているのか、完全にフリーではない状態なのかがいつでも判断できます。各プロセスで使用されているメモリ量をみるコマンド”ps aux”を使用することで、プロセスあたりのメモリ使用量を確認できます。

MapR フレームワークは標準的なメモリ使用量の情報を正しく容易に整理できるよう設計されています。しかし、ある特定のノードの詳細なメモリ使用量を正確に知るには、もう少し掘り下げて調べる必要があります。 1) メモリがフリーになったのか検証したいノードにログインして、2) プロセスごとのメモリ使用を確認してください。