前言
今天在安装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的缺失导致中间文件不可用吧。。
后记
至于这三者的内存管理,就真的要写一大堆了。笔者需要先查查资料再写。