MongoDB的CPU使用率不断提高

时间:2016-01-22 16:39:27

标签: mongodb

根据docker容器统计信息,我的mongo数据库不断消耗250到350%的cpu。这是非常令人印象深刻的,因为它是一个单核心系统:P

令人遗憾的是,这是我的生产实例,更令人难过的是,它必须活到下一个生产备份,还需要3.5个小时。

我试图做一个mongotop但它告诉我所有显示的集合的0ms统计数据。我可以做任何其他事情来弄清楚发生了什么吗?

PS:db持续9周并没有造成问题。

2 个答案:

答案 0 :(得分:21)

有一个名为db.currentOp()的函数,它列出了当前正在运行的查询,其中包含非常详细的信息,还包括它们运行的​​持续时间(secs_running)。

然后,您可以使用currentOp.opiddb.killOp()来终止该查询/操作。

如果db.currentOp()没有返回任何结果,因为没有严重的查询,那么还会db.setProfilingLevel()通过将查询存储到&#中来启用性能分析34;本地"数据库。 Here"教程"来自"M102: MongoDB for DBAs"课程。

更多信息也可以在Igor Khomenko的详细文章"Troubleshooting MongoDB 100% CPU load and slow queries"中找到。

答案 1 :(得分:17)

第一个也是更重要的认为你需要做的是检查你的查询类型,例如,在我的情况下,我有同样的问题,当我检查我的日志时tail -f /var/log/mongodb/mongod.log(你可以配置这个日志/等/ mongod.conf)。我只看到像db.brands.find这样的简单查询({"字段":"值"})但是我检查了"品牌"集合和查询上的这个字段不是索引(db.brands.getIndexes())唯一的想法是我做的是索引这个字段db.brands.ensureIndex({name:1},{unique:true})当然要确保你的字段是唯一的,因为在这个例子中我把它作为一个独特。之后我的CPU从100%变为20%。

所以我不是说这是你的问题,但可以,在做一些最大的想法之前检查你的问题。