IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

关于tokyocabinet的memory db 的filesize与使用内存的关系

PHPor 的blog 2011-07-18 12:24:02 累计浏览 2,403 次
本机暂存
我使用tokyotyrant的方式如下:

    /data1/tokyotyrant/bin/ttserver -host 10.10.10.111 -port 6789 -dmn -pid /data1/tokyotyrant_data/6789/6789.pid -le -uas -thnum 16 -log /data1/tokyotyrant_data/6789/6789.log -ulog /data1/tokyotyrant_data/6789/6789.ulog -sid 6789 -mhost 10.10.10.112 -mport 7890 -rts /data1/tokyotyrant_data/6789/6789.rts *

    两项统计数据如下:

    [root@localhost ~]# tcrmgr inform -port 6789 10.10.10.111

    record number: 10470754

    file size: 2014949218

    [root@localhost ~]# tcrmgr inform -port 6789 -st 10.10.10.111 | grep rss

    memrss  3826147328

    [root@localhost ~]#

    疑问:

    存储的数据占用的内存大小file size为2G; 但是物理内存占用为3.8G; 我承认程序本身会占用一部分内存,100MB了不得了吧,那么其余的1.7G都做什么用了呢?

    首先,通过看源码,得知,file size是通过存储的数据计算出来的,其中包括存储数据的数据结构占用的空间和key+value占用的空间。计算方式如下:

    tcutil.c

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    /* Get the total size of memory used in a map object. */

    uint64_t tcmapmsiz(const TCMAP *map){

     assert(map);

     return map->msiz + map->rnum * (sizeof(*map->first) + sizeof(tcgeneric_t)) +

     map->bnum * sizeof(void *);

    }

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    所以,即使没有一条记录,filesize也不会是0的; 默认的bnum为65672; 如果你的机器是32位的,则,0条记录时的filesize为: 65672 * 4 = 262688; 所以,如果你执行了vanish,发现filesize不为0 ,就不用奇怪了。   

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. Java开发岗位面试题归类汇总 (累计阅读 22,156)
  2. HFile存储格式 (累计阅读 15,975)
  3. hbase运维 (累计阅读 14,924)
  4. Linux内存点滴 用户进程内存空间 (累计阅读 13,229)
  5. hbase介绍 (累计阅读 12,367)
  6. Linux Used内存到底哪里去了? (累计阅读 11,867)
  7. Linux操作系统的内存使用方法详细解析 (累计阅读 10,150)
  8. 几个内存相关面试题(c/c++) (累计阅读 9,445)
  9. top 命令补充 ( VIRT RES SHR) (累计阅读 9,117)
  10. HBase技术介绍 (累计阅读 8,076)