GitHub user imbajin added a comment to the discussion: [Question] RocksDB 
memory occupation out of control

> 想咨询下几个问题:
> 1. 如果使用 jemalloc 能不能有效降低内存?
> 2. 关于内存的占用,主要会集中在哪块?我该如何调优?
> 3. 如何查看 rocksdb 内存占用,hugegraph 内部缓存的内存占用

1. 在高吞吐读写时, 应该是可用 `jemalloc` 代替默认的 `ptmalloc` 的, 可以尝试替换并在此 issue 记录反馈. (步骤见后)
2. 主要应该是 "memtable + block cache + 内存碎片" 三块
3. 目前查看不太直观, 之后会引入新的方式查看 (BETA)

---

#### `glibc` 的 `ptmalloc` 可能存在内存分配问题:
> 内存持续增长,无法释放,可能是内存分配器 glibc的问题,导致存在大量的内存碎片无法释放, 从而造成内存泄露

`glibc` 的 `ptmalloc` 可能存在的问题:
1. glibc 内存按 `arena` 分配,arena是一块 连续的内存,默认64M。回收是栈式回收。由于部分内存被缓存在rocksdb的memtable 
或 block cache中,造成栈顶的未释放,可能造成整个arena不能回收
2. 在高并发环境下,为了减少锁的争用,允许存在多个arena。这些arena被不同的线程使用,但彼此之间独立,意味着空闲空间不能合并,造成浪费


解决方案: 替换成 `jemalloc`或 `tcmalloc` (可进行对比尝试)

`jemalloc` 替换方案:
1. 从[官方 GitHub 地址](https://github.com/jemalloc/jemalloc)下载jemalloc源码按说明编译
2. 修改(编辑) server 的启动脚本, 添加环境变量 `LD_PRELOAD` 导入 jemalloc 的 so 二进制依赖文件, 例如
`export LD_PRELOAD=/usr/local/lib/libjemalloc.so`
3. 启动 server, 复现之前的问题步骤, 看是否问题得到解决 (注释后是否重新出现), 如无变化需确认替换是否成功

GitHub link: 
https://github.com/apache/incubator-hugegraph/discussions/2268#discussioncomment-6646380

----
This is an automatically sent email for dev@hugegraph.apache.org.
To unsubscribe, please send an email to: dev-unsubscr...@hugegraph.apache.org

Reply via email to