【问题标题】:Mongodb with node is using high cpu usage on Docker带有节点的 Mongodb 在 Docker 上使用高 CPU 使用率
【发布时间】:2016-09-01 13:30:54
【问题描述】:

您好,我已经在 ubuntu Aws 微型实例上安装了 Rocket.chat,它使用 Nginx、MongoDB 和节点运行,其中 MongoDB 使用 docker 映像运行 mongo:3.0
它在安装当天运行顺利,但经过一段时间后它的服务器变慢了,我使用top 命令在服务器内部进行了检查。是MongoDB使用cpu%在70左右。第二天就闪退到90%以上。

我已经在服务器上重新安装了所有东西,但还是一样,没有运气。

这是top cmd 的截图。
请让我知道是否需要任何其他统计信息。

如何检查这里的主要问题,如何优化它以使其正常工作。

谢谢

【问题讨论】:

  • 这似乎更像是 Rocket.chat 支持问题,而不是编程问题。

标签: node.js mongodb performance rocket.chat


【解决方案1】:

我知道为什么会出现这个问题。我开始使用 Meteor 实现我的自定义聊天平台。 所以问题的原因是用户对象中的services.resume.loginTokens
我们正在尝试在自定义原生 android 应用程序上实现火箭聊天方法/api。 每当应用程序从 android 应用程序调用登录方法时,它都会添加一个新的登录令牌而不删除以前的登录令牌(用于多系统登录)

因此,如果您通过一些日期检查删除前一个,它不会对用户对象产生开销。

Accounts.registerLoginHandler (loginRequest) ->

  # ... Do whatever you need to do to authenticate the user

  stampedToken = Accounts._generateStampedLoginToken();
  Meteor.users.update userId,
    $push: {'services.resume.loginTokens': stampedToken}

  # Delete old resume tokens so they don't clog up the db
  cutoff = +(new Date) - (24*60*60)*1000
  Meteor.users.update userId, {
    $pull:
      'services.resume.loginTokens':
        when: {$lt: cutoff}
  },
  {multi : true}

  return {
    id: userId,
    token: stampedToken.token
  }

我从这里得到了这个解决方案,所以question

【讨论】:

  • 我能否请您澄清一下: 1:这是您设计的集合,打电话给用户吗?还是mongo自己的用户集合,用于mongo认证? 2:所以问题的原因是数组中存在很多子文档,在用户集合中的文档中。你知道为什么这会导致服务器使用这么多 CPU 吗?
  • 这个设计和功能来自rocket.chat,我在我的android项目中实现了它的API和方法。所以如果你已经登录,那么你应该使用现有的登录令牌,或者从应用程序中注销。
  • 我的应用正在开发尝试中,所以我尝试手动登录,不使用登录令牌或注销。
  • 来自 MDG:“Meteor 的关键是 DDP 在顶级文档字段级别向文档发送更改的方式。这意味着,如果您在文档上有大而复杂的子字段会发生变化通常,DDP 可以通过网络发送不必要的更改。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2022-06-23
  • 2021-10-03
  • 2020-02-05
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多