php Allocator Jemalloc TCMalloc那个内存分配器比较好?
php Allocator Jemalloc TCMalloc那个内存分配器比较好?
php一键安装脚本可以选择是否安装内存优化
You have 3 options for your Memory Allocator install.
1: Don't install Memory Allocator. (Default)
2: Install Jemalloc
3: Install TCMalloc
----------------------------------------
ptmalloc 是glibc的内存分配管理
tcmalloc 是google的内存分配管理模块
jemalloc 是BSD的提供的内存分配管理
三者的性能对比参考从网上的一个图如下:
测试代码如下:
1: #include <iostream>
2: #include <map>
3:
4: using namespace std;
5: int main(int argc, char**argv) {
6: cout << "Hello world" << endl;
7: std::map<int,int> int_map;
8: for (int i = 0; i < 10000000; ++i) {
9: int_map.insert(std::map<int,int>::value_type(i,i));
10: }
11: return 0;
12: }
都是执行一个map insert 100W次操作。
为了测试方便,我们生成了3个binary,分别链接使用jemalloc和tcmalloc 和ptmalloc的库做对比:
ldd jemalloc_test
linux-vdso.so.1 => (0x00007fffc6fc3000)
libjemalloc.so.1 => /usr/local/lib/libjemalloc.so.1 (0x00007f45181aa000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4517ea4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4517c1e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4517a08000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4517673000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4517454000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4517250000)
/lib64/ld-linux-x86-64.so.2 (0x00007f45183f2000)
ldd tcmalloc_test
linux-vdso.so.1 => (0x00007fff94160000)
libtcmalloc.so.0 => /usr/lib/libtcmalloc.so.0 (0x00007f20107dc000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f20104d6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2010250000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f201003a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f200fca5000)
libunwind.so.7 => /usr/lib/libunwind.so.7 (0x00007f200fa8b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2010a68000)
ldd ptmalloc_test
linux-vdso.so.1 => (0x00007fff08501000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6c156000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6bed1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6bcba000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6b925000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7e6c483000)
然后分别执行各程序,使用time统计时间如下:
time./jemalloc_test
Hello world
real 0m9.927s
user 0m9.650s
sys 0m0.250s
time ./tcmalloc_test
Hello world
real 0m9.836s
user 0m9.410s
sys 0m0.410s
time ./ptmalloc_test
Hello world
real 0m11.890s
user 0m11.520s
sys 0m0.360s
jemalloc和tcmalloc的性能不分伯仲,而ptmalloc则要低一些。
===========================
lnmp中的内存管理库TCMalloc和Jemalloc比较
lnmp一键安装包安装系统的时候一般用Jemalloc
TCMalloc
优点:很多系统都可以用源来安装 TCMalloc ,而且支持的 gcc 编译库比较新。
缺点:软件是在 Google Perftools 下的,安装的时候如果不编译好可能会安装到我们不需要的其他软件,而且 Google Perftools 安装过程比较复杂还需要安装相应的库。
Jemalloc
优点:目前是 Maridab 、Tengine、Redis 中默认推荐的内存优化工具,所以使用 Jemalloc 对这些程序的兼容度还是比较高的。而且经过测试高负载情况下 Jemalloc 更加优秀。安装过程方便,不用安装额外的库。
缺点:对使用最新的gcc编译不友好。
---------------------
Redis在编译时,会先判断是否使用tcmalloc,如果是,会用tcmalloc对应的函数替换掉标准的libc中的函数实现。其次会判断jemalloc是否使得,最后如果都没有使用才会用标准的libc中的内存管理函数。而在最新的Redis2.4.4版本中,jemalloc已经作为源码包的一部分包含在源码包中,所以可以直接被使用。而如果你要使用tcmalloc的话,是需要自己安装的。
php Allocator Jemalloc TCMalloc那个内存分配器比较好?的更多相关文章
- 内存分配器 (Memory Allocator)
对于大多数开发人员而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法. 来UC前,我就是这样觉得的.实际深入进去时,才发现这个领域里也是百家争鸣.非常热闹.有操作 ...
- 14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器 当InnoDB 被开发, 内分配齐 提供了与操作系统和运行库往往缺乏 ...
- 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器
14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器 当InnoDB 被开发时,内存分配提供了操作系统和 run-time ...
- 从零开始写STL-内存部分-内存分配器allocator
从零开始写STL-内存部分-内存分配器allocator 内存分配器是什么? 一般而言,c++的内存分配和释放是这样操作的 >>class Foo{ //...}; >>Foo ...
- jemalloc内存分配器详解
前言 C 中动态内存分配malloc 函数的背后实现有诸派:dlmalloc 之于 bionic:ptmalloc 之于 glibc:allocation zones 之于 mac os x/ios: ...
- Nah Lock: 一个无锁的内存分配器
概述 我实现了两个完全无锁的内存分配器:_nalloc 和 nalloc. 我用benchmark工具对它们进行了一组综合性测试,并比较了它们的指标值. 与libc(glibc malloc)相比, ...
- 理解 glibc malloc:主流用户态内存分配器实现原理
https://blog.csdn.net/maokelong95/article/details/51989081 Understanding glibc malloc 修订日志: 2017-03- ...
- Go内存分配器可视化指南【译】【精】
当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂.一切看起来都像一个神秘的黑盒子.因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥 ...
- [转]STL的内存分配器
题记:内存管理一直是C/C++程序的红灯区.关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面 ...
随机推荐
- ubuntu上u-boot的编译
1,下载u-boot 2,将Windows中的u-boot复制到ubuntu虚拟机中自定义目录并解压 3,进入该目录cd 4,安装dtc:sudo apt-get install device-tre ...
- 【English】主语从句的引导词是如何选择?
在英语中,主要有三大从句,即名词性从句(包括主语从句,宾语从句,表语从句,同位语从句).形容词性从句(即定语从句).副词性从句(即状语从句,包括时间.条件.结果.目的.原因.让步.地点.方式等). 引 ...
- dedecms首页去掉index.html怎么设置
很多网友用IIS服务器建站,反映说dedecms首页默认多了一个/index.html,一般是没有这个后缀的,直接就**.com,那么如何将dedecms首页去掉index.html呢?很简单,服务器 ...
- Python3学习之路~5.3 random模块
random模块常用方法: import random # 随机数 print(random.random()) # 生成一个0到1的随机浮点数,0 <= n < 1.0 print(ra ...
- 008-ThreadLocal原理分析
一.简介 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程 ...
- 002-linux命令-文件和目录、查看文件内容-文件和目录、查看文件内容
一.文件和目录 cd /home :进入‘/home’目录 cd .. 返回上一级目录 cd ../..返回上两级目录 cd 进入个人的主目录 cd ~user1进入个人的主目录 cd - 返回上次所 ...
- Spark SQL读取Oracle的number类型的数据时精度丢失问题
Spark SQL读取数据Oracle的数据时,发现number类型的字段在读取的时候精度丢失了,使用的spark版本是Spark2.1.0的版本,竟然最后经过排查和网上查资料发现是一个bug.在Sp ...
- [django]阅读笔记
https://dwz.cn/FUcnVGi8 新建目录 django-admin.exe startproject myblog django-admin.exe startproject mybl ...
- 2019.03.23 Http
自己也要分清楚 看清楚 request,response 一个是请求 一个是相应 行 头 之间还有个空行 体 HttpRequest请求对象(只读) 当用户访问一个视图函数时,Djan ...
- SJW-遍历我的账户左侧导航页面(句柄切换)
页面信息类似如下: 定位页面元素: import time from selenium import webdriver # import os #A #username = "182007 ...