视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Redis的内存分配
2020-11-09 13:03:31 责编:小采
文档


Redis 使用 zmalloc 进行内存分配,zmalloc下层使用 tcmallc 或者 jemalloc,它们在多线程并发的情况下比 glibc malloc 性能要好。下面四个函数被替换: malloc calloc realloc free zmalloc 主要是为每段分配内存额外增加一个8字节的头部,这个头部记录了此

Redis 使用 zmalloc 进行内存分配,zmalloc下层使用 tcmallc 或者 jemalloc,它们在多线程并发的情况下比 glibc malloc 性能要好。下面四个函数被替换:

  • malloc
  • calloc
  • realloc
  • free
  • zmalloc 主要是为每段分配内存额外增加一个8字节的头部,这个头部记录了此次分配的内存的长度。zmalloc等函数会自动处理偏移,用户无需知道头部的存在。

    zmalloc 定义了 used_memory 记录当前一共分配出去了多少内存。

    为了评估内存碎片的问题,Redis 需要知道进程实际消耗了多少内存(RSS,resident set size),这主要使用操作系统提供的接口。

  • Linux:每个进程在/proc 目录下有一个自己的目录,按进程 ID 命名,读取 stat 文件的第24个域就可以得到进程使用的内存用量;
  • Apple:使用 task_info获取当前进程的 task_basic_info,其中 resident_size就是内存用量。
  • 计算 RSS/used_memory 即可知道目前碎片问题的严重程度,越大越严重。

    下载本文
    显示全文
    专题