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