Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

问题背景


发生问题前,天远系统共 发生问题前,线上系统共 128G 内存,分配 IoTDB 80G 堆内存,堆外内存无限制。

...

配置更新后,出现查询卡住的现象,使用 show query processlist 查看,显示有查询一直卡在内存里。



排查过程


首先,从 jstack 入手,查看查询卡在什么地方,为什么不继续进行。

...

MAX_CACHED_BUFFER_SIZE:每个 buffer 的最大值,在 JDK8u102 之后添加,之前甚至对单个 buffer 的大小上限没有任何限制。

bufferCache: 临时堆外内存池




这个时候问题原因已经大致清晰了。天远的机器是 这个时候问题原因已经大致清晰了。线上的机器是 80核,也就是我们整整开了 80 个查询子线程,而且天远的 个查询子线程,而且出问题的线上系统的 tsFile 文件大小非常大,最大的文件达到了 30G,单个 chunk 大小为 500M,也就是说即使我们不考虑 buffer 池子有大小这件事,仅仅缓存一个 chunk 大小的 buffer,也耗了 80 * 500M = 40G 的堆外内存!

...