大查询后报错,并且连接丢失

  • nebula 版本:v2.0.0
  • 部署方式(分布式 / 单机 / Docker / DBaaS):docker-compose
  • 是否为线上版本:N
  • 硬件信息
    • 磁盘 SSD
    • CPU, Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
    • 内存,128G
  • 问题的具体描述

背景:这个库数据有点大,亿级vertex,十亿级edge. 所有tag和edge都有索引。

执行以下nGQL后,报错

并且studio的连接也需要清空重连才能继续使用

请问您的studio版本是?同样的 query 报错 Incorrect frame size 能在 console复现么?

你好! 感谢回复
studio版本是v2.2.1

console下执行也报错:

确认一下是不是查了一个大点 OOM 了,graphd 是不是重启了

1 个赞

graphd没有重启

我刚重现问题时观察了一下,内存是比较平稳的;另外,在所有服务的日志中grep exception或error关键字,也找不到新的记录。

确认一下是所有的查询都会出现这种情况还是只有上述的查询这样?先排除一下 studio 和 nebula 版本兼容的问题。

1 个赞

突然留意到一点, console报错后,是console程序异常退出了。所以这个是不是更可能是client的问题?

这句是会出现问题的:
MATCH p=(sc:school)--(dev:device)--(m:ip)--(u:user) where id(sc)=='9100d750aa174628a4bf1974c214ef76' return p;

如果少跳一层,能正常出数据:
MATCH p=(sc:school)--(dev:device)--(m:ip) where id(sc)=='9100d750aa174628a4bf1974c214ef76' return p;

client 退出应该是 graphd crash 导致的,按照你的描述感觉应该是 OOM,因为 docker-compose 设置了 restart 策略,所以 graphd 容器退出也是会被再次拉起来的

1 个赞
MATCH p=(sc)–(dev:device)–(m:ip)–(u:user) where id(sc)==‘9100d750aa174628a4bf1974c214ef76’ return p;

语句改这样试试

请看看上边docker ps截图,STATUS列,如果重启过, 不会是Up 7 hours ago的

MATCH p=(sc)--(dev:device)--(m:ip)--(u:user) where id(sc)=="9100d750aa174628a4bf1974c214ef76" return p;

这句也会报同样错的

MATCH p=(sc:school)--(dev:device)--(m:mac)--(u:user) where id(sc)=="9100d750aa174628a4bf1974c214ef76" return p;

这句跑过了。。。把中间的(m:ip)换为(m:mac)

应该是thrift的go client读frame出了错误,具体起因还有在看看

我这边能提供更多信息吗?目前看不到有价值的日志,有没有debug模式能开启更细的日志?

你用 GitHub - Shylock-Hg/nebula-go at temp/tune-frame-limit 这个go-client的分支重新编译console在试一下

1 个赞

啊这。。我没玩过go呢,得空试一下哈。

FYI,我用python的client查出问题那句是ok的,确实有点大,返回了2.6万行

1 个赞

应该就是go client的限制,我们这里后续思考一下怎么处理

3 个赞

更新一个相关PR:Change the default frame max length to uint32.max by Aiee · Pull Request #96 · vesoft-inc/nebula-go · GitHub

1 个赞