MongoDB每2小时10分钟准确减速

Mas*_*ang 9 mongoose mongodb node.js

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

我的服务器配置:

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

搜索stackoverflow和google后我做了什么:

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

我猜可能有锁定的东西,最可能的原因是它可能正在构建索引.我的数据库中有一些特别之处:

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

我被这个问题困扰了3个月.任何意见/建议将受到高度赞赏!

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

7月5日星期五15:20:11 .040 [conn2765] serverStatus非常慢:{基本后:0,断言后:0,后面挂起后:0,连接后:0,后面游标:0,后面是dur:0,之后extra_info:0,在globalLock之后:0,在indexCounters之后:0,在lock:0之后,在network:0之后,opcounters:0之后,opcountersRepl:0之后,在recordStats:222694之后,在repl:222694之后,在end:222694}之后

7月5日星期五17:30:09 .367 [conn4711] serverStatus非常慢:{基本后:0,断言后:0,后面挂起后:0,连接后:0,后面游标:0,后面是dur:0,之后extra_info:0,在globalLock之后:0,在indexCounters之后:0,在lock:0之后,在网络之后:0,在opcounters之后:0,在opcountersRepl:0之后,在recordStats之后:199498,在repl:199498之后,在结束时:199528}

7月5日星期五19:40:12 .697 [conn6488] serverStatus非常慢:{基本后:0,断言后:0,后面挂起后:0,连接后:0,后面游标:0,后面是dur:0,之后extra_info:0,在globalLock之后:0,在indexCounters之后:0,在lock:0之后,在网络之后:0,在opcounters之后:0,在opcountersRepl:0之后,在recordStats之后:204061,在repl:204061之后,在end:204081之后}

以下是我的pingdom报告的屏幕截图,服务器每2小时7分钟缩短4分钟.在开始时,服务器每2小时6分钟下降2分钟. 来自pingdom的报道

[编辑1]来自主机提供商的更多监控结果: CPU http://i.minus.com/iZBNyMPzLSLRr.png DiskIO http://i.minus.com/ivgrHr0Ghoz92.png 连接http://i.minus.com/ itbfYq0SSMlNs.png 定期增加的连接是因为连接正在等待,并且当前连接的计数将累积,直到数据库被解除阻塞.这不是因为交通拥挤.

Com*_*ler 1

我认为你的意思是具有 3 个节点的副本集,而不是“3 个副本集”。

如果您仍然遇到同样的问题。这是我的意见:

  1. 由于您在 linode.com 中运行服务器。您的服务器实际上是一个虚拟机,您正在与其他人共享资源。周期性变慢可能是由于其他运行的周期性磁盘负载造成的。由于您已经研究了许多不同的可能性,因此即使需要付出一些努力,这也可能是您的一个选择。

  2. 这肯定是由 mongodb 或您的系统运行的作业引起的。请尝试寻找任何定期运行的工作。例如,尝试消除其中一台辅助设备上的 3600 秒延迟。即使这不是2小时10分钟,但这也可能是它的触发因素。

我无法在评论中发表我的建议,因为它不允许我这样做。因此,我将其发布为答案。