Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 如何释放Mongodb使用的缓存?_Caching_Mongodb - Fatal编程技术网

Caching 如何释放Mongodb使用的缓存?

Caching 如何释放Mongodb使用的缓存?,caching,mongodb,Caching,Mongodb,Mongodb使用内存映射文件,当我长时间使用时,我看到ubuntu中的“free-m”命令留下的空闲内存更少,缓存使用了很多。那么杀掉Mongodb缓存还是要花很多钱?如何释放缓存 MongoDB将(至少看起来)占用大量可用内存,但实际上它让操作系统的VMM来告诉它释放内存(请参阅MongoDB文档中的内容) 您应该能够通过重新启动MongoDB释放所有内存。 然而,在某种程度上,MongoDB并没有真正“使用”内存 例如,从MongoDB文档中 取决于您可能看到的平台 将映射的文件作为内存存

Mongodb使用内存映射文件,当我长时间使用时,我看到ubuntu中的“free-m”命令留下的空闲内存更少,缓存使用了很多。那么杀掉Mongodb缓存还是要花很多钱?如何释放缓存

MongoDB将(至少看起来)占用大量可用内存,但实际上它让操作系统的VMM来告诉它释放内存(请参阅MongoDB文档中的内容)

您应该能够通过重新启动MongoDB释放所有内存。

然而,在某种程度上,MongoDB并没有真正“使用”内存

例如,从MongoDB文档中

取决于您可能看到的平台 将映射的文件作为内存存储在 过程,但这不是严格意义上的 对的Unix top可能会显示更多 对mongod的记忆比实际情况要好 适当的操作系统(即 虚拟内存管理器, 根据操作系统(OS)管理内存 其中“内存映射文件” 居住在通常会显示此数字 在像“free-lmt”这样的程序中

它被称为“缓存”内存

MongoDB使用LRU()缓存算法来确定要释放哪些“页面”,您将在这两个问题中找到更多信息

  • (你不能)
    • 我的问题是什么:

      因为应用程序部署在计算机上的时间很长,并且没有删除历史数据,这导致应用程序使用的数据库的大小增加。Mongodb占用的可用数据量几乎是RAM中可用数据量的两倍多,而RAM并没有留下任何可用内存来运行应用程序

      删除数据前的内存状态:

      [root@ip-172-31-1-173日志]#自由-m 可用的免费共享缓冲区/缓存总使用量 成员:15630146214673240213207 掉期:0

      删除数据后的内存状态:

      [root@ip-172-31-1-173 mongo]#自由-m 可用的免费共享缓冲区/缓存总使用量 成员:156305849523478845458763 掉期:0

      对于WiredTiger,MongoDB利用WiredTiger内部缓存和文件系统缓存

      在版本3.2中更改:从MongoDB 3.2开始,WiredTiger内部缓存在默认情况下将使用以下两者中较大的一个:

      60% of RAM minus 1 GB, or
      1 GB.
      
      对于RAM容量高达10 GB的系统,新的默认设置小于或等于3.0默认设置(对于MongoDB 3.0,WiredTiger内部缓存使用1 GB或已安装物理RAM的一半,以较大者为准)

      对于RAM超过10 GB的系统,新的默认设置大于3.0设置

      通过文件系统缓存,MongoDB自动使用WiredTiger缓存或其他进程未使用的所有可用内存。文件系统缓存中的数据被压缩


      清理历史数据时,还需要修复数据库,以保持已用缓存的大小。

      从3.2开始,MongoDB使用WiredTiger作为默认存储引擎。以前的版本使用MMAPv1作为默认存储引擎

      对于WiredTiger,MongoDB利用WiredTiger内部缓存和文件系统缓存。 在MongoDB 3.2中,默认情况下,WiredTiger内部缓存将使用以下两者中较大的一个:60%的RAM减去1GB,或1GB。 对于RAM容量高达10 GB的系统,新的默认设置小于或等于3.0默认设置(对于MongoDB 3.0,WiredTiger内部缓存使用1 GB或已安装物理RAM的一半,以较大者为准)。对于RAM超过10 GB的系统,新的默认设置大于3.0设置


      要限制wiredTriggered缓存,请在.config文件中添加以下行:


      wiredTigerCacheSizeGB=1

      我们在作为副本集成员的实时/生产服务器上遇到类似问题,因此无法重新启动该过程。尽管刷新RES内存(驻留内存)不是一个好主意,但在我们的用例中,我们必须通过以下命令来完成:

      yes | tr \\n x | head -c $((1024*1024*1000)) | grep n
      
      它创建了一个进程,该进程将接管1GB的RAM,迫使mongodb为此进程释放内存。这是针对具有2GB ram的系统。例如,如果您的系统使用20GB的RAM,您可能需要为10GB或15GB运行此功能:

      yes | tr \\n x | head -c $((1024*1024*15000)) | grep n
      

      谢谢!MongoDB可以自动将服务器上的所有可用内存用于缓存空间,而无需任何缓存大小配置。我们如何配置?无法限制缓存大小。。。是故意的。这里有更多的细节:你可能想看看这篇文章,看看它是否能帮助你。。。为什么不能使用
      ulimit
      ?以下是文档:-在Mongo 3.2中,配置值名称似乎是:
      storage.wiredTiger.engineConfig.cacheSizeGB
      ,但是
      --wiredTigerCacheSizeGB
      是一个命令行参数?