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

转自--http://www.ideawu.net/blog/archives/693.html 

在最近的一个项目中, 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 位环境 
posted @ 2015-05-12 10:04  Lawrence.Lau  阅读(551)  评论(0编辑  收藏  举报