MongoDBが使用可能なRAMをすべて使用していない


9

mongoクラスターに約200 GB相当のデータが保存されています。mongoを実行するインスタンスの1つの物理メモリは8GBです。このインスタンスでは、他に何も起こりません。Mongoのドキュメントに基づいて理解できる限り(このドキュメントのように:http : //www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage)、これはmongodプロセスが約100%を使用する必要があることを意味します利用可能な物理メモリ。しかし、topコマンドの次の出力を見ると、mongodインスタンスが2GBの常駐メモリしか使用しておらず、使用されていない2GBの完全な物理メモリが使用されていないことがわかります。

誰かがこの動作を私に説明できますか?なぜ2GBの空きメモリがあるのですか?

top 出力:

top - 23:19:43 up 89 days, 20:05,  2 users,  load average: 0.41, 0.55, 0.59
Tasks: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.0%us,  1.3%sy,  0.0%ni, 93.9%id,  2.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8163664k total,  6131764k used,  2031900k free,    54976k buffers
Swap: 16771848k total,    10604k used, 16761244k free,  5367700k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                             
 1401 mongodb   20   0  174g 2.0g 1.9g S   23 26.2  18070:55 mongod
 ...

システム情報:

$ uname -a
Linux aluminum 2.6.32-31-server #61-Ubuntu SMP Fri Apr 8 19:44:42 UTC 2011 x86_64 GNU/Linux

ノート:

  • このクラスターには、予想どおりにmongodが動作し、使用可能なすべてのメモリを利用する別のインスタンスがあります。
  • mongostatを見ると、一貫してページフォールトが発生しているように見えるため、使用されるメモリの量は増加しているはずです
  • (私 mongodb-user googleグループで同じ質問をしましたが、応答がありませんでした。)

どのLinuxディストリビューション?32ビットですか、64ビットですか?(編集あなたの質問の出力を持つlsb-release -auname -aしてください)
Philᵀᴹ

ありがとう。追加されましたunameが、lsb-releaseインストールしていません。
クリスW.

MongoDBの32ビットバージョンを誤ってダウンロードしましたか?32ビットのMongoインスタンスの最大サイズは2GBです。
アーロン

@ BryceAtNetwork23いいえ。mongodbの合計は間違いなく2GB以上あります(実際には数百ギグ)。
クリスW.

@ChrisW彼はデータベースのサイズではなく最大メモリサイズを意味します。そして、それは2GBをうまく説明するようです。
rfusca

回答:


5

常駐メモリサイズは、mongodプロセスが実際にアクセスしたメモリ内のページ数を表します。それが使用可能なメモリよりも大幅に少なく、データが使用可能なメモリを超えている場合(あなたのメモリはそうです)、それは単に十分なページにまだアクティブに触れていないだけの場合である可能性があります。

これが当てはまるかどうかを判断するには、を実行する必要がfree -mあります。出力は次のようになります。

free -m
             total       used       free     shared    buffers     cached
Mem:          3709       3484        224          0         84       2412
-/+ buffers/cache:        987       2721
Swap:         3836        156       3680

私の例では、キャッシュは合計に近くありません。つまり、mongodが十分なページに触れていないだけでなく、ファイルシステムキャッシュは、一般的にディスクから読み取られているページで満たされていません。

これの簡単な解決策はタッチコマンド(2.2で追加)です。データが大きすぎて収まらない場合でもRAMにすべてをロードしようとするため、大きなデータセットでは注意して使用する必要があります(ディスクIOおよびページフォールト)。確かにそれは確かに効果的にメモリを満たします:)

キャッシュされた値が使用可能な合計に近い場合、問題は、ディスクからメモリに読み込まれている多数のページがmongodプロセスに関連していない(したがって、mongodプロセスに影響されない)ことです。この種の不一致の通常の候補は先読みです。私はすでにその特定のカバーされてきた話題を 別の場所に、必要な場合、私はちょうど未来の読書のために、これらの2つの答えをリンクますので、詳細に。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.