我有一个 mongodb 实例,它似乎每天崩溃一次。我在 mongo 日志文件中看不到任何有用的信息。一切正常,然后进程就崩溃了,没有记录任何附加信息。我在 strace 下运行它,希望得到一些有用的线索,直到它崩溃并得到以下输出:
Wed Apr 17 10:56:39.340 [conn172] M/R: (1/3) Emit Progress: 2800/4351 64%
Wed Apr 17 10:57:16.696 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 16ms
Wed Apr 17 10:57:17.035 [PeriodicTask::Runner] task: WriteBackManager::cleaner took: 17ms
Wed Apr 17 10:57:17.429 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 79ms
+++ killed by SIGKILL +++
这只发生在一个特定的虚拟机上,其余的都很好。还检查了每小时/每日的 cron 作业,以防出现问题并杀死 mongod,但没有发现任何可疑之处。
操作系统:Ubuntu 12.04.2
蒙戈:2.4.1
我还能做些什么来进一步排除故障?
答案1
当你正在运行 Map Reduce 作业时,它被终止了,总是这样吗?
我之所以问这个问题,是因为这听起来像是看门狗类型的进程决定您使用了太多内存并终止该进程时出现的行为。 Map Reduce 作业(内联作业,或特别是在大型数据集上运行的作业)往往会快速增加 RAM 使用率。
如果这是内核决定您内存不足并调用 OOM 终止程序(这看起来像是无声崩溃并记录在 dmesg 中),那么您不会得到 SIGKILL。因此,这让我相信还有其他程序在执行终止程序以防止内存使用量超过某个阈值。
如果您想验证,请db.collection.find().explain()
在大型数据集上运行并查看是否也会触发 SIGKILL。 如果是这样,我认为这种类型的 VM 不适合运行内存映射数据库。