MongoDB的CPU使用率不断提高

问题描述 投票:16回答:2

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

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

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

PS:db持续9周并没有引起问题。

mongodb
2个回答
21
投票

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

然后你可以使用currentOp.opiddb.killOp()来杀死那个查询/操作。

如果db.currentOp()没有返回任何结果,因为没有破坏的查询,那么还有db.setProfilingLevel(),它将通过将查询存储到“本地”数据库来启用分析。 Here是来自"M102: MongoDB for DBAs"课程的“教程”。

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


17
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.