はじめに
MongoDBで特定の環境のみで大量のエラーを吐いて落ちる現象を確認しました.エラーを確認したところ,MongoDBのデータベース容量が過剰でメモリに乗りきらない可能性があると考えました.特に,WiredTriggerがメモリ・アロケーションに失敗しているようなエラーを吐いていました.
ここでは,データベースがメモリに乗りきらないので修復することを目的に話を進めます.ほかの理由でMongoDBが落ちる場合は,ほかの対処方法を探してください.
MongoDBのデータベースの修復
MongoDBのmongod
コマンドでは,データベースを現在の環境に合わせて修復するコマンドが用意されています.
mongod --repair --dbpath="C:\db"
でデータベースの修復処理を走らせることができます.あくまでデータベースの修復だけで,サーバの立ち上げは行いません.
再度,mongod --dbpath="C:\db"
でデータベースを開いてください.
MongoDBのrepairオプション
repairオプションでは,MongoDBのデータベースファイルの修復を自動的に行います.
例えば,データベースを作成した環境のメモリが32GBで,運用環境で4GBしかメモリがないとき,データベースがメモリに乗りきらずに落ちることがあります.ほかにも,過去に強制的にMongoDBをシャットダウンしたら.lock
ファイルが残ってて起動しなくなる,などのトラブルも自動的に解決します.
MongoDBが立ち上がらないときは,焦らずにrepair
オプションを使ってデータベースを修復してみましょう.