我在 32 位生产系统上使用 MongoDB,这很糟糕,但现在我无法控制。挑战在于将内存使用量保持在 ~2.5GB 以下,因为超过此值会导致 32 位系统崩溃。
根据 mongoDB 团队的说法,跟踪内存使用情况的最佳方法是使用操作系统的进程跟踪系统(即 Unix 系统上的 ps 或 htop;Windows 上的 Process Explorer。)来获取虚拟内存大小。
数据库主要由一个不断循环数据的表组成,即定期从传感器接收数据,并且每天一个 cron 作业擦除过去 3 天之前的所有数据。在一段时间内,内存使用量会慢慢增加。随着时间的推移,我使用 db.serverStats()、db.lectura.totalSize() 和 ps 做了一些笔记,如下图所示。请注意,相关表的大小在上个月有所减少,但内存使用量仍然增加。
现在,我存储的数据天数有一些调整空间。今天基本删除了一半的数据,然后重启了mongodb,但是根据ps的mem virtual/mem mapped,最重要的内存使用量几乎没有变化!为什么当我擦除数据(并重新启动)时这些不会减少?我读了一些其他问题,人们说 mongo 并没有真正使用它可能正在使用的所有内存,并且您无法清除缓存或限制内存使用。但是,我怎样才能确保我保持在 2.5GB 的限制之下呢?
除非有办法阻止这个数据集大小——不管内存使用量的逐渐增加,否则在我看来 32 位版本的 Mongo 是不可用的。注意:如果它解决了问题,我不介意损失一点性能。