我们使用Debian 11和mongodb 5.0.6在三个裸金属服务器(没有虚拟化、没有docker/kubernetes)上运行一个小型mongodb副本集:
machineA: 128 8GB内存,1TB磁盘,主machineB: 128 8GB,1TB磁盘,二级machineC: 8GB RAM,20 8GB磁盘,仲裁器
突然之间,我们在应用程序日志(如"NotWritablePrimary"/"MongoNotPrimaryException“)中出现了错误中断--我们假设连接字符串将确保不会发生中断:
mongodb://machineA:27017,machineB:27017/?replicaSet=MyRepl&waitQueueMultiple=10&readPreference=primaryPreferred原来,主mongodb实例是由linux内核杀死的,因为它消耗了大量的RAM。复制集现在运行了3个月,在任何时候都没有问题。但突然间,我看到内存消耗如下:

突然之间,mongodb使用了大量的RAM:

就在内核终止了mongod进程之后,SystemD在作为服务运行时重新启动了它。但是在重新启动之后,它再次消耗最大的RAM量,直到它再次死亡。
今天早上,这种行为突然停止了。我们没有改变我们的应用程序上的任何东西,所以现在的问题是:在mongodb进程中,是什么消耗了这么多RAM?
据我所知,WireTiger引擎使用的内存约为可用内存的50%,但这并不能解释机器总内存的最大使用量。我还从Percona mongodb_exporter获得了一些度量,这表明内存由mongodb使用,系统上没有其他进程使用:

有趣的是,次要内存的使用在当时根本没有移动:

有人知道或暗示这是怎么回事吗?
发布于 2022-07-20 12:32:32
我们发现,我们的一个应用程序服务在某些情况下是疯狂运行的,这对我们来说有点难以理解。
当不断地对MongoDb进行攻击时,内存的使用率似乎越来越高,而不是像我预期的那样使用更多的CPU资源。在某种程度上,被linux内核杀死了。
在我们解决了申请中的问题后,情况就消失了。
https://serverfault.com/questions/1103446
复制相似问题