如何了解导致 MongoDB 内存峰值的原因?

如何了解导致 MongoDB 内存峰值的原因?

我在 Linux 上的集群设置(3 个副本)中运行 MongoDB 4.x,有时内存会莫名其妙地激增(mongod 进程在 64GB RAM 机器上突然增加 10% 以上的内存消耗),并且有时几个小时都不会恢复。有时这种情况会在短时间内多次发生,导致交换被消耗,最终减慢整个数据库的速度,影响复制延迟并导致总体集群不稳定。

DB 的工作负载相当高 - 8 核机器上的平均 CPU 负载为 50-80%,平均内存消耗为 64GB 的 70%。工作负载是高速写入和批量读取的混合。我尝试将所有重度读取引导到辅助节点,以便主节点可以专注于写入,但有时大量读取也会影响主节点。

在峰值期间,执行db.currentOp()不会显示任何需要很长时间的事情,尽管一些不应该花费很长时间的查询(find()在小集合上很简单)在这些峰值出现时可能需要几秒钟。

我该怎么做才能查看哪些查询突然消耗了这么多内存?我一直在寻找慢速查询,但我觉得这是一个(不准确的)代理,无法找到消耗如此多内存的原因。

相关内容