本文共 707 字,大约阅读时间需要 2 分钟。
生产环境实例频繁 OOM ,调查发现主要由一些$near
查询导致,查询类似如下,其中 latlng 字段建立了。
{ "find" : "userData", "filter" : { "latlng" : { "$near" : [ 116.34642045073839, 39.87082232130999 ], "$maxDistance" : 0.9009009009009009 } }, "ntoreturn" : 10000}
官方解释是因为$near需要排序,实际上是从中心点,不断往外扩展,找出附近的点,所以$near cursor会缓存计算结果。MongoDB cursor 的默认超时时间是10分钟,所以如果10分钟内所有打开 cursor 缓存的内存总量超过总内存,就会出现 OOM 的情况。
针对上述问题,应用有如下2种方式优化内存使用
设置更小的 cursor timeout
了解问题详细情况可以查看
转载地址:http://gpyyo.baihongyu.com/