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
プロセスが実際にアクセスしたメモリ内のページ数を表します。それが使用可能なメモリよりも大幅に少なく、データが使用可能なメモリを超えている場合(あなたのメモリはそうです)、単に十分なページにまだアクティブに触れていないだけの場合があります。
これが当てはまるかどうかを判断するには、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
私の例では、cachedは合計に近くありません。つまり、mongodが十分なページに触れていないだけでなく、ファイルシステムキャッシュは、一般にディスクから読み取られるページで満たされていません。
これの簡単な解決策は タッチコマンド (2.2で追加)です。すべてのデータをRAM =データが大きすぎて収まらない場合でも(大量のディスクIOとページフォールトが発生します。)確かにメモリがいっぱいになります:)
キャッシュされた値が利用可能な合計に近い場合、問題は、ディスクからメモリに読み込まれている多数のページがmongodプロセスに関連していない(したがって、mongodプロセスに影響されない)ことです。この種の不一致の通常の候補は先読みです。この特定の topicelsewhere についてはすでに詳しく説明しているので、必要に応じて、これら2つの回答をリンクして、後で読むことができます。