influxdb内存持续升高不主动释放问题


问题

influxdb部署后,内存会随着查询等操作持续升高且不会主动释放.

分析

  • go在释放内存返回到内核时,在Linux上使用的是MADV_DONTNEED,虽然效率比较低,但是会让RSSresident set size 常驻内存集)数量下降得很快。

  • 不过在go 1.12里专门针对这个做了优化,在释放内存时,使用了更加高效的MADV_FREE而不是之前的MADV_DONTNEED,这样带来的好处是,一次GC后的内存分配延迟得以改善,也会更加积极地将释放的内存归还给操作系统,以应对大块内存分配无法重用已存在的堆空间的问题。不过也会带来一个副作用RSS不会立刻下降,而是要等到系统有内存压力了,才会延迟下降。

  • InfluxDB使用MADV_FREE,只有当系统内存使用有压力的时候才会进行真正的内存回收,这个时候RSS才会下降,可以通过GODEBUG=madvdontneed=1 ./influxdb的方式启动,强制使用MADV_DONTNEED方式.

MADV_FREE 需要 Linux 4.5 以及以上内核,否则会继续使用原先的 MADV_DONTNEED 方式。

参考链接


文章作者: wuzhiyong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wuzhiyong !
评论
 上一篇
java插件化设计开发 java插件化设计开发
问题java实现动态从jar包加载插件并运行. 实现 定义插件运行的接口,用户需要自己实现的 public interface PluginService { /** * 插件运行方法 */ void process()
2020-09-29
下一篇 
influxdb客户端连接超时问题 influxdb客户端连接超时问题
问题// 默认情况,java客户端连接服务端等待数据返回的时间很短,如果超时就会报以下错误 org.influxdb.InfluxDBIOException: java.net.SocketTimeoutException: timeout
2020-09-21
  目录