我有一套小型 MongoDB 副本集 (2.4.6),似乎每周一次,主副本会陷入困境,平均负载会飙升。此应用程序的流量并不大。它位于 EC2 中,是 M1.medium(1 个 CPU,3.7 GB RAM)。
- 我们已经安装了 MMS,并且操作计数器从未超过 25-30。
- 页面错误非常少(.002-.003)。
- 无需排队。
- 平均负载通常低于 1,但当出现这些峰值时,平均负载为 2-4。
- 查询显示发生时间为 500ms-1700ms。
- 没有复制滞后。
当我跟踪日志时,我看到了以下内容:
Mon Mar 17 17:16:48.342 [conn62561] warning: ClientCursor::yield can't unlock b/c of recursive lock ns: db_name.jobs top: { opid: 2507609, active: true, secs_running: 0, op: "query", ns: "db_name", query: { findandmodify: "jobs", query: { status: "queued", queue: "upload_hostname" }, sort: { enqueued: 1 }, new: 1, remove: 0, upsert: 0, update: { $set: { status: "dequeued", dequeued: new Date(1395076608340) } } }, client: "10.50.101.10:38766", desc: "conn62561", threadId: "0x7ff2d3772700", connectionId: 62561, locks: { ^: "w", ^db_name: "W" }, waitingForLock: false, numYields: 0, lockStats: { timeLockedMicros: {}, timeAcquiringMicros: { r: 0, w: 4 } } }
我遇到了这个https://groups.google.com/forum/#!topic/mongodb-user/s62QnfT8Vbc然而我对 Mongo 还很陌生。
此问题最近才开始出现,而且我们只有一定数量的用户会连接。我正在寻找有关查找原因的指导。我还运行了 db.collection.find().explain(),结果返回了以下内容:
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 505,
"nscannedObjects" : 505,
"nscanned" : 505,
"nscannedObjectsAllPlans" : 505,
"nscannedAllPlans" : 505,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
},
"server" : "hostname:27017"
我们可能只需要增加服务器规模,但我想尝试找出导致每周一次激增的原因。