Used memory hits the high watermark of total system memory

  • nebula 版本:2.6.2
  • 部署方式:分布式
  • 安装方式:源码编译
  • 是否上生产环境:Y
  • 硬件信息
    • 磁盘 HDD
    • CPU、内存信息 40 core 192G
  • 问题的具体描述
    1)当使用nGql语句进行查询时,出现Used memory hits the high watermark of total system memory,但是这边一共有15个graph服务,这种查询不会再第一次出现上述错误时自动自动找到内存充裕的graph服务进行查询吗?

    2)nebula 启动后会不会自动对leader进行均衡,因为经常出现因内存使用过大,系统强制kill掉服务的现象,但是等服务自动拉起的时候,发现leader不均衡。

不会,目前 nebula 都是需要人肉去 balance leader 的。

2.6 的设计中,graph 不具备全局调度功能,所以是不能自动检测空闲的 graph,然后发 query 给它执行的。

后面哪个版本有这种功能

我问过了。这个功能涉及全局调度,是个很复杂的功能。 @MuYi 我们后续会考虑实现这个功能么?

这个个很好的输入。
不过这里还有一些问题细节可能需要讨论;如我想到的:
因为我们的内存都是在算子开始执行的时候申请的。这样会存在一些问题,

  1. 在 graphA 上进行了算子 1 的操作,做了很多准备,收集了很多数据;
  2. graphA在准备进行算子 2 操作的时候,申请内存发现内存不够了。
  3. 如果此时把操作转移给更内存更空闲的 graphB,就涉及到大量的数据搬迁。
  4. 而当数据搬迁完以后,发现内存不够了,这时候可能 gg 了,或者再搬迁。。

因此,如果调度不好的话,会很大的增加系统的内存开销和延时。

1 个赞

能不能这样
1)先统计所有算子大约需要多少内存
2)选择内存充足的graph节点执行nGql
或者
直接找内存最充裕的graph执行nGql

根据我昨天和研发的交流,你说的 1 是目前下一个大版本支持的(不过社区版支持不支持暂不可知),至少 query 级别的资源控制是做了的。

棒棒的,期待新版本!

1 个赞

:joy: 估计要小半年,你可以多问问。

:joy:没事,时刻关注

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。