zoukankan      html  css  js  c++  java
  • redis编译 jemalloc缺失

    前言

    今天在安装redis的时候,第一次编译时未安装gcc导致编译失败。

    安装完gcc后第二次编译时,报错如下:

    jemalloc/jemalloc.h: No such file or directory。

    解决

    我原以为这个只需要重新安装gcc即可,结果并不行。后经博客园大佬自由早晚乱余生的博文启发,发现需要先清空编译文件再重新编译才可以。做法如下:

    make distclean && make
    

    原理

    在redis的内存分配机制中,有三种分配方法,分别是:jemalloc, tcmalloc, libc.

    三种方法分别是不同厂家提出的解决方案:

    • jemalloc是facebook推出的
    • tcmalloc是Google推出的
    • libc是标准的内存分配库malloc和free

    由于redis并没有自己的内存池,没有在标准的系统内存分配器上再添加本身的东西,所以系统内存分配器的性能及碎片率会影响到redis的性能。

    而这三种解决方案,redis的优先调用顺序是:tcmalloc > jemalloc > libc,因此三者的性能也是呈现这个序列的。

    而jemalloc从redis2.4.4开始就被写入redis源码了。但是不知道为什么到了redis5.0.9又没办法直接使用了,可能是gcc的缺失导致中间文件不可用吧。。

    后记

    至于这三者的内存管理,就真的要写一大堆了。笔者需要先查查资料再写。

    参考链接

    1. https://www.cnblogs.com/operationhome/p/10342258.html
    2. https://blog.csdn.net/libaineu2004/article/details/79400357
    3. https://www.cyningsun.com/07-07-2018/memory-allocator-contrasts.html
  • 相关阅读:
    连续奇数
    50:数根
    38:花生采摘
    素数对
    17:字符串判等
    2702:密码翻译
    27:单词翻转
    15:整理药名
    12:加密的病历单
    09:密码翻译
  • 原文地址:https://www.cnblogs.com/young233/p/13579617.html
Copyright © 2011-2022 走看看