mac*_*pak 2 mongodb mongodb-.net-driver
我使用 Mongodb 3.6 + .net 驱动程序 (MongoDb.Driver 2.10) 来管理我们的数据。最近,我们注意到我们的服务(后台)消耗了大量内存。分析转储后,发现有一个名为 BsonChunkPool 的 mongo 对象始终消耗大约 0.5 GB 的内存。正常吗?我真的找不到任何关于这种类型及其实际用途的有价值的文档。有人可以帮忙吗?
它的BsonChunkPool存在是为了可以重用大内存缓冲区(块),从而减轻垃圾收集器必须完成的工作量。
最初池是空的,但随着缓冲区返回到池中,池不再是空的。池中保存的任何内存都不会被垃圾回收。这是设计使然。该内存旨在被重用。这不是内存泄漏。
默认配置BsonChunkPool是它最多可以容纳 8192 个 64KB 的块,因此如果池增长到最大大小,它将使用 512MB 内存(甚至超过您观察到的 7 或 35MB) 。
如果由于某种原因您不希望BsonChunkPool使用那么多内存,您可以通过将以下语句放在应用程序的开头来进行不同的配置:
BsonChunkPool.Default = new BsonChunkPool(16, 64 * 1024); // e.g. max 16 chunks of 64KB each, for a total of 1MB
Run Code Online (Sandbox Code Playgroud)
我们尚未尝试使用不同的块计数和大小值,因此如果您决定更改默认BsonChunkPool配置,您应该进行一些基准测试并验证它不会对您的性能产生不利影响。
来自 jira: https: //jira.mongodb.org/browse/CSHARP-3054