【问题标题】:mongodb writing use cpu fully but not use memory at allmongodb写入完全使用cpu但根本不使用内存
【发布时间】:2020-11-20 05:25:31
【问题描述】:

我不知道为什么,但统计数据显示非常有趣。

首先,我在ec2上安装了MongoDB,c5.4xlarge。

我在数据库上做了一些测试。

有趣的是,当我同时写 10 个文档时,MongoDB 每个内核使用了几乎 100% 的 CPU,但根本没有增加内存!!

如果我没记错的话,mongodb 会首先写入内存,所以我期望的是增加内存使用量。

为了减少每个核心的CPU使用率,我做了如下:

  • 禁用时间
  • 使 MongoDB 数据文件夹在 xfs 文件系统上运行。
  • 在 EBS 上存储 MongoDB 数据,并通过配置提高 IOPS
  • 升级glibc新的最新版本

我使用的MongoDB版本是4.4,使用的引擎是WiredTiger。

如果您有在 AWS 上运行 MongoDB 以连续写入大量数据的经验,请帮助我。

下面是我的 mongodb.conf

# Where and how to store data.
storage:
  dbPath: "/home/ubuntu/mongodb/data"
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 24

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: "/home/ubuntu/mongodb/log/mongod.log"

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

replication:
  replSetName: "rs-exchange"

【问题讨论】:

  • 非常有趣,但现在它太宽泛了,更适合dba.stackexchange 或MongoDB developers forum
  • 另外,众所周知,WiredTiger 在 XFS 中工作得更好,你应该用一个链接来支持你关于内存的声明。检查有线老虎文档。
  • @Minsky 感谢您的评论 :) 是的,正如我所写,我已经在 XFS 上使用过 WiredTiger 引擎
  • 另外你应该分享副本集配置,看看那里有什么问题
  • @Minsky谢谢你的评论。最后我发现这是我的问题。我写错了一些代码,即我使用了 update_one 而不是 insert_one。对于update_one的情况,我应该使用索引,但我没有......应用索引后,CPU使用率急剧下降。

标签: mongodb memory cpu-usage


【解决方案1】:

不要求数据库使用特定数量的内存或它使用的内存量不断增长。

例如,如果我在无限循环中执行replace 操作,自然会消耗大量 CPU,但使用的内存量很可能保持不变。

【讨论】:

  • 当您在 MongoDB 中执行写入操作时,数据将写入内存中的日志。除非您运行的是旧版本,或者独立版本中的设置错误等。我想知道您为什么这么说。
  • 内存中的日志如何导致无限的内存消耗?
  • 写入操作保存在 RAM 中,并刷新到磁盘,如果您运行写入操作,两者都应该增加,而不仅仅是 CPU
  • 是的,这与无限内存消耗有什么关系?
  • 我不太关心那是什么:在写操作中,RAM 的使用应该增加。如果是这样,那么您给出的答案至少是不完整的。
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多