2013-01-24

为什么LevelDB用了大量VIRT虚拟内存

Views: 27326 | Add Comments

在最近的一个项目中, SSDB 刚一重启便使用了 500M 的虚拟内存(top VIRT), 但这都是 LevelDB 使用的, 并不是 SSDB 内存泄露. 在 64 位的环境, LevelDB 会利用 mmap 来读取 sst 文件, 所以导致了大量虚拟内存, 而实际使用的内存 RES 只有 50M.

在 64 位的环境中, 即使几十 G 的虚拟内存也没有任何影响. 但如果你觉得看起来不好, 可以这样改进:

  • 减少 leveldb::Options 的 max_open_files 参数, 这样 LevelDB 用 mmap 打开的文件就减少了
  • 提供自己定制的 Env, NewRandomAccessFile() 不使用 mmap
  • 改成 32 位环境

Related posts:

  1. 将LevelDB数据导入SSDB
  2. LevelDB 会丢数据吗?
  3. LevelDB 服务器 SSDB 支持主从(master-slave)同步了!
  4. 在PHP代码中使用LevelDB
  5. SSDB 支持 Snappy 压缩了
Posted by ideawu at 2013-01-24 11:09:09 Tags: ,

Leave a Comment