mongo啟動報錯ERROR: child process
mongodb啟動報錯ERROR: child process failed, exited with error number 14
今天準備對測試環境的mongodb進行壓測,測試一下單實例的情況億級數據在建立普通索引的情況下的查詢性能。然而出師未捷身先死,在插入數據的時候被我開的五個線程搞的鎖死了(因為mongo的索引默認是實時建立,在過程中會鎖死該集合所有操作,無法讀寫,在數據量大的時候就會出現鎖死的假象)T T .. 。
接著去伺服器上命令關閉,結果一樣半天關不了......然後一想反正是測試環境,一怒之下殺了進程(當時我的內心:!哇咔咔咔讓你拽,不行了吧!哈哈哈哈哈......)。
然後重啟的時候我又懵逼了...發現重啟不了了,報了個ERROR: child process failed, exited with error number 14錯誤TT |||。好吧搜唄,看了一些類同問題有讓刪.log的還有讓刪.lock的但最終的解決不了問題。後來可能是因為程序員改BUG的習慣我突然想起了查log,當初配mongo的時候我清晰的記的mongo的log體系很健全(廢話,畢竟也是一個很成熟的DB)。然後我就進到配的日誌路徑下,打開日誌(因為之前查詢解決方案把之前的日誌移到別的地方了,所以cat的時候一下就打開了),打開後一看,原因就很明顯了!!!大致是說之前關閉的時候索引未建立完,所以造成這次啟動不了!並提示可以使用--noIndexBuildRetry跳過該所以的建立。
於是我用了--noIndexBuildRetry命令,完美啟動了!然後我又特意看了一下我的數據發現之前的那個未完成的索引沒了,所以mongo的跳過就是說直接刪掉了,於是這次我打開日誌,然後建立索引好處是能清晰的看到進度。另外索引建立還可以使用後台的方式createIndex({「key」:1},{background:true})這樣可以在不影響讀寫的情況下後台建立索引,好處就是不用鎖死該集合了,壞處就是整個過程會更慢一些。
下面總結一下解決該問題步驟:
1 進入mongo的日誌目錄打開日誌文件(一般叫mongodb.log)
2 查看具體原因
3 分析問題,得出結論。像我這次就是./mongod --config /usr/local/mongodb/bin/conf/mongodb.conf --noIndexBuildRetry解決了問題。
推薦閱讀:
※漫威世界的正確打開方式------科技之於世界的善惡
※如何看待Nework的鏈公司和NKC未來的價值
※定量式加膠槍價格
※關於阿里基礎設施,你要知道的都在這裡
※銳捷實戰系類 (四十六) OSPF多ASBR選路原則