当前位置: 首页 > 知识库问答 >
问题:

内存安全的mongoDB任务

丌官盛
2023-03-14

在50GB集合的时间戳字段上添加单个索引时,MongoDB在96GB根服务器上的内存不足。

MongoDB是否有任何选项可以在“安全模式”下运行查询或任务,例如,不需要过多地削减内存?它似乎非常敏感,可能会崩溃,例如,在非索引时间戳字段上运行一些带有$lte/$gt的查找查询。

共有2个答案

闽焕
2023-03-14

它似乎非常敏感,可能会崩溃,例如在非索引时间戳字段上运行一些带有$lte/$gt的查找查询。

是OOM杀手正在杀死它,因为您的monGod实例正在将大量页面交换到RAM中。您可能有很多进程在争夺RAM。您可以指示Linux不要杀死monGod守护进程,如下所示:

sudo echo -17 > /proc/<process if of mongod>/oom_adj

不幸的是,您无法控制mongoDB使用多少内存。我建议查看mongoDB上的后台索引文档。还有一些更有用的链接:

  1. 请参阅stackoverflow上的相关线程
狄海
2023-03-14

我无法控制它,但mongodb是否应该为“安全”设置一个配置,确保在RAM突破限制时释放它?甚至在它阻止其他进程或被oom killer阻止之前?

MongoDB不使用自己的内存管理。相反,它使用OS'LRU。操作系统分页文档如此之重,因为它使用了分配给monGod的内存量,也就是您的工作集大于您为MongoDB备用的RAM量,因为这样的MongoDB正在为大部分而不是您的所有数据交换页面错误(分页的好参考:http://en.wikipedia.org/wiki/Paging)。

在这种情况下,我强烈建议不要限制MongoDB,因为它会运行得更糟。但是,特别是在Linux上,您可以在运行mongod的mongo用户上使用ulimit:http://docs.mongodb.org/manual/administration/ulimit/

MongoDB是否有任何选项可以在“安全模式”下运行查询或任务,例如不过多削减内存?

不是真的。

它似乎非常敏感,可能会崩溃,例如,在非索引时间戳字段上运行一些带有$lte/$gt的查找查询。

当然,这不应该导致MongoDB出现OOM异常,它可能表示某个地方出现内存泄漏:http://docs.mongodb.org/manual/administration/ulimit/

如果在运行MongoDB的系统上限制驻留内存大小,则可能会导致操作系统在正常情况下终止mongod进程。不要设置此值。如果操作系统(即Linux)杀死了mongod,请使用OOM killer检查serverStatus的输出,确保MongoDB没有泄漏内存。

 类似资料:
  • 内存安全 Rust推崇安全与速度至上,它没有垃圾回收机制,却成功实现了内存安全 (memory safety)。 所有权 在Rust中,所有权 (ownership) 系统是零成本抽象 (zero-cost abstraction) 的一个主要例子。 对所有权的分析是在编译阶段就完成的,并不带来任何运行时成本 (run-time cost)。 默认情况下,Rust是在栈 (stack) 上分配内存

  • 默认情况下,Swift 会阻止你代码中发生的不安全行为。比如说,Swift 会保证在使用前就初始化,内存在变量释放后这块内存就不能再访问了,以及数组会检查越界错误。 Swift 还通过要求标记内存位置来确保代码对内存有独占访问权,以确保了同一内存多访问时不会冲突。由于 Swift 自动管理内存,大部份情况下你根本不需要考虑访问内存的事情。总之,了解一下什么情况下会潜在导致冲突是一件很重要的事情,这

  • 问题内容: 我正在编写一个需要处理内存中私钥的快速应用程序。由于此类对象的敏感性,因此在释放对象时需要清除键(也就是将其写为全零),并且无法将内存分页到磁盘(通常使用mlock()完成)。 在Objective-C中,您可以提供一个自定义CFAllocator对象,该对象允许您使用自己的函数来分配/取消分配/重新分配对象使用的内存。 因此,一种解决方案是仅在Objective-C中实现一个“ Se

  • 描述帮助保护service mesh流量的任务。 验证Istio双向TLS认证。这个任务展示如何验证并测试Istio的自动交互TLS认证。 配置基础访问控制。这个任务展示如何使用Kubernetes标签控制对服务的访问。 配置安全访问控制。这个任务展示如何使用服务账号来安全的控制对服务的访问。 启用每服务双向认证。这个任务展示如何为单个服务改变双向TLS认证。 插入CA证书和密钥。这个任务展示运维

  • 问题内容: 如何将用户输入的密码存储在内存中,并在不再需要时安全地擦除它? 为了详细说明,目前我们有以下代码: 调用该方法后,我们该怎么办才能用乱码填充包含密码的内存区域,以使某人无法通过执行核心转储来恢复密码? 可以用Python完成吗? 问题答案: Python对内存的控制没有那么低。接受它,继续前进。在 最好的 ,你可以做的是调用后,这样的口令字符串对象的引用依然存在。任何声称能够做得更多的

  • 文本安全内容检测 用于校验一段文本是否含有违法内容。 频率限制 单个appid调用上限为2000次/分钟,1,000,000次/天 调用示例 // 传入要检测的文本内容,长度不超过500K字节 $content = '你好'; $result = $app->content_security->checkText($content); // 正常返回 0 { "errcode": "0