插入数据之后很长一段时间nebula-storaged占满cpu

  • nebula 版本:nebula-storaged version 2022.02.15-nightly, Git: 02b2091, Build Time: Feb 16 2022 00:29:49
  • 部署方式:单机
  • 安装方式:Docker
  • 是否上生产环境:N
  • 硬件信息
    • 云盘SSD
    • 8核cpu,16GB内存
  • 问题的具体描述
  • 我在docker中部署了单机的nebula,配置如上所述,还在开发测试阶段,它确实配置不是非常高。
  • 我在测试过程中,创建了10k个vertex和10k edge,也就是2w条数据,运行之后很长(数个小时)一段时间cpu几乎被nebula-storaged占满,期间没有复杂和大量的插入或者查询操作。

我查看磁盘IO,使用率很低,几十kb/s,可以忽略

机器TOP如下:

top - 14:41:02 up 23:55, 2 users, load average: 32.09, 31.91, 34.67
Tasks: 376 total, 1 running, 375 sleeping, 0 stopped, 0 zombie
%Cpu(s): 84.9 us, 3.5 sy, 0.0 ni, 11.1 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st
MiB Mem : 16008.3 total, 1472.1 free, 11637.1 used, 2899.1 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 4027.8 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                  

8915 root 20 0 1509324 327296 8644 S 198.0 2.0 692:29.46 nebula-storaged
9103 root 20 0 1416608 307024 8400 S 188.4 1.9 666:13.64 nebula-storaged
9185 root 20 0 1376160 273224 8388 S 185.0 1.7 634:29.23 nebula-storaged
9790 root 20 0 2128660 281836 10996 S 99.3 1.7 375:38.01 nebula-graphd
3107 root 20 0 1461220 516936 53756 S 9.0 3.2 110:52.02 k3s-server
8101 root 20 0 1144072 134780 8868 S 4.3 0.8 60:42.03 nebula-metad

我使用perf生成了火焰图:

我的问题:为什么当插入数据操作结束之后,依然很长时间占用那么多cpu,虽然我的机器配置不高,但我测试的数据也仅仅几万条。
我在火焰图中看到了类似IndexVertex的字样,我对nebula-cpp代码并不熟悉,它是在更新索引吗?
我应该如何避免这种大量占用cpu的问题?

nightly 的话不是一个正式的发行版本,一般是研发开发的最新版本。不过你这个都一年了,有机会你可以换成发行版哈。

nebulagraph 底层采用了 rocksdb,数据这块的话,你写入职后会有个 wal 数据,大概 4 个小时之后会删除。你看看过了 4 个小时是不是机器就稳定了?

多谢及时回复~

我不太了解wal…wal会对nebula-storaged组件的cpu占用有那么大影响吗?我是否有办法关闭wal,或者我关闭了wal会有哪些影响?

我如果持续插入数据,在插入3/4万条左右,机器会彻底卡死,重启nebula都无用,需要重新安装。

有没有办法解决nebula-storaged占用cpu的问题?是我使用方式存在问题吗?应该修改一些配置?

你看看这个文章有启发没有。

:sweat_smile:这篇文章似乎是优化内存的,和我遇到的cpu问题关联似乎不大。。。

你说的对。我给记岔了。

你的数据库在跑查询吧,有 lookup 或者 match。这些查询中的部分计算是下推到 storaged 里面进行的,所以 storaged 会使用 CPU 是正常的。

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