前言

今天在安装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
posted on 2020-08-28 19:32  eryoung2  阅读(1014)  评论(0编辑  收藏  举报