MongoDB CPU使用率高的可能原因:
- 全表扫描
- 如果这种请求比较频繁,建议对查询的字段建立索引的方式来优化。
- 未使用索引或索引不合理
- 如果索引建立的不太合理,或者是匹配的结果很多。这样即使使用索引,请求开销也不会优化很多,执行的速度也会很慢。
- 大量数据排序
- 服务器能力达到上限
- 整个数据库的查询非常合理,所有的请求都是高效的走了索引,基本没有优化的空间了,就是机器的服务能力已经达到上限了,应该升级配置了
- 服务器被攻击
- 通过分析端口连接数,来源IP,日志确认来源IP的访问内容
查看数据库当前正在执行的操作:
> db.currentOP()
该命令的输出示例如下:
{
"desc" : "conn632530",
"threadId" : "140298196924160",
"connectionId" : 632530,
"client" : "11.192.159.236:57052",
"active" : true,
"opid" : 1008837885,
"secs_running" : 0,
"microsecs_running" : NumberLong(70),
"op" : "update",
"ns" : "mygame.players",
"query" : {
"uid" : NumberLong(31577677)
},
"numYields" : 0,
"locks" : {
"Global" : "w",
"Database" : "w",
"Collection" : "w"
},
....
},
您需要重点关注以下几个字段:
说明:如果发现有异常的请求,您可以找到该请求对应的 opid,执行 db.killOp(opid) 终止该请求。
查看数据库连接数:
> db.serverStatus().connections;
{
"current" : 70,
"available" : 51130,
"totalCreated" : 17234652,
"active" : 9
}