node.js - MongoDB准确地每2小时10分钟减速一次

标签 node.js mongodb mongoose

在过去的 3 个月里,我的 MongoDB 服务器每 2 小时 10 分钟就会变得非常慢,非常准确。

我的服务器配置:

  • 3个副本集,为了数据备份,其中1个有3600秒延迟。
  • 副本集中的 3 个主服务器没有从服务器。
  • 使用mongoose + node.js 提供rest api。
  • 在 24 小时统计数据中,平均每秒大约 9 次读取和 1.5 次写入。

我在 stackoverflow 和谷歌搜索后做了什么:

  • 重启服务器不能更改慢速间隔 2 小时 10 分钟
  • 为我查询的所有字段创建索引,没有影响
  • 删除一台服务器中的数据文件,用另一台服务器恢复,然后删除另一个服务器恢复,没有影响
  • 转移主服务器,无影响
  • 在数据库慢的时候运行'currentOps',我可以看到很多查询卡在那里,日志太多在这里粘贴,但没有看到一些异常查询。
  • 在mongo控制台中,当数据库慢时检查“serverStatus”,命令等待数据库恢复。
  • 当数据库运行缓慢时,“top”命令不会增加内存使用量。
  • rest api 不访问数据库效果很好。

我猜可能有什么东西被锁定了,最可能的原因是它可能正在构建索引。我的数据库中有一些特别的东西:

  • 我在一个数据库中有大约 14000 个集合,并且还在增加。一个集合中可能有 1 到 3000 条记录。
  • 收藏数量和记录数量都在动态增加。
  • 创建新集合时将指定索引字段。

我被这个问题困扰了 3 个月。任何意见/建议将不胜感激!

以下是我的日志文件中的一些日志:

Fri Jul 5 15:20:11.040 [conn2765] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after cursors: 0, after dur: 0, after extra_info: 0, after globalLock: 0, after indexCounters: 0, after locks: 0, after network: 0, after opcounters: 0, after opcountersRepl: 0, after recordStats: 222694, after repl: 222694, at end: 222694 }

Fri Jul 5 17:30:09.367 [conn4711] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after cursors: 0, after dur: 0, after extra_info: 0, after globalLock: 0, after indexCounters: 0, after locks: 0, after network: 0, after opcounters: 0, after opcountersRepl: 0, after recordStats: 199498, after repl: 199498, at end: 199528 }

Fri Jul 5 19:40:12.697 [conn6488] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after cursors: 0, after dur: 0, after extra_info: 0, after globalLock: 0, after indexCounters: 0, after locks: 0, after network: 0, after opcounters: 0, after opcountersRepl: 0, after recordStats: 204061, after repl: 204061, at end: 204081 }

这是我的 pingdom 报告的屏幕截图,服务器每 2 小时 7 分钟就会停机 4 分钟。一开始,服务器每 2 小时 6 分钟就宕机 2 分钟。 report from pingdom

[编辑 1] 来自主机提供商的更多监控结果: CPU http://i.minus.com/iZBNyMPzLSLRr.png DiskIO http://i.minus.com/ivgrHr0Ghoz92.png Connections http://i.minus.com/itbfYq0SSMlNs.png 周期性增加的连接是因为连接正在等待,并且当前连接的计数会累积直到数据库被解锁。 这不是因为流量太大。

最佳答案

我们发现了一个特定的 2:10 问题。在我们的例子中,它是由 MMS 执行的 dbStats。 我们不得不升级集群,问题得到解决。

关于node.js - MongoDB准确地每2小时10分钟减速一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17657909/

相关文章:

python - 使用生成器迭代 Mongo 中的大型集合

javascript - Mongoose 枚举数

javascript - 如何使用 jwt 解码 token

javascript - MapReduce 删除重复的字符串

mongodb - 从谷歌云存储流恢复 `mongodump`备份

javascript - POST 请求时 Mongoose 验证错误

node.js - 链接 Mongoose 查询的最佳方式

node.js - 关闭浏览器选项卡 nodejs

node.js - Amazon SES SendRawEmail (Node.JS) 中的电子邮件未显示 To :, Cc 和 Bcc

java - java中将数据存储到mongodb中