https://wenfh2020.com/2020/07/30/jemalloc/
 

jemalloc 是一个优秀的内存分配器,通过与系统默认的内存分配器进行比较:jemalloc 内存分配性能比系统默认的分配器快 50%。


1. 安装

  • MacOS
1
brew install jemalloc
  • Centos
1
2
yum install jemalloc
yum install jemalloc-devel

2. 测试

2.1. 源码 (github 测试源码)

测试 10,000,000 次,随机大小的内存块分配和回收,查看它们的工作效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdlib.h>
#include <string.h>
#include <sys/time.h> #include <iostream> #ifdef USE_JEMALLOC
#include <jemalloc/jemalloc.h>
#endif #define MALLOC_CNT 10000000 long long mstime() {
long long mst;
struct timeval tv;
gettimeofday(&tv, NULL);
mst = ((long long)tv.tv_sec) * 1000;
mst += tv.tv_usec / 1000;
return mst;
} int main() {
srand((unsigned)time(NULL));
long long begin = mstime();
for (int i = 0; i < MALLOC_CNT; i++) {
int size = 1024 * 4 + rand() % 1024;
char* p = (char*)malloc(size);
memset(p, rand() % 128, size);
free(p);
}
long long end = mstime(); std::cout << "begin: " << begin << std::endl
<< "end: " << end << std::endl
<< "val: " << end - begin << std::endl;
return 0;
}

2.2. 测试结果

测试时间单位:微秒,jemalloc 内存管理耗时大约是系统默认内存管理的一半 (605 vs 1253)。demo 只是对 大于 4 * 1024 比较大块的内存进行测试,对于小内存的测试,jemalloc 表现还更加优秀。

有兴趣的朋友,也可以测试一下 jemalloc 对 C++ 的 new 和 delete 的影响。

1
2
3
4
5
6
7
8
9
10
11
# normal mem test.
$ g++ -std='c++11' -g test_jemalloc.cpp -o tjemalloc && ./tjemalloc
begin: 1596078974122
end: 1596078975375
val: 1253 # jemalloc mem test.
$ g++ -std='c++11' -g test_jemalloc.cpp -o tjemalloc -DUSE_JEMALLOC -ljemalloc && ./tjemalloc
begin: 1596078980303
end: 1596078980908
val: 605

[转帖]jemalloc 性能测试的更多相关文章

  1. 【原创】MySQL5.7.18(ptmalloc VS tcmalloc VS jemalloc)性能测试

    ptmalloc(glibc的malloc)是Linux提供的内存分配管理模块,目前我们MySQL默认使用的内存分配模块. tcmalloc是Google提供的内存分配管理模块. jemalloc是F ...

  2. [转帖]Linux性能测试 pmap命令

    Linux性能测试 pmap命令 https://www.cnblogs.com/txw1958/archive/2012/07/26/linux-pmap.html 名称:       pmap - ...

  3. MySQL服务器发生OOM的案例分析

    [问题] 有一台MySQL5.6.21的服务器发生OOM,分析下来与多种因素有关 [分析过程] 1.服务器物理内存相对热点数据文件偏小,62G物理内存+8G的SWAP,数据文件大小约550G 触发OO ...

  4. tcmalloc jemalloc glibc内存分配管理模块性能测试对比

    tcmalloc是谷歌提供的内存分配管理模块 jemalloc是FreeBSD提供的内存分配管理模块 glibc是Linux提供的内存分配管理模块 并发16个线程,分配压测3次,每次压15分钟,可以看 ...

  5. [转帖]Docker五种存储驱动原理及应用场景和性能测试对比

    Docker五种存储驱动原理及应用场景和性能测试对比 来源:http://dockone.io/article/1513 作者: 陈爱珍 布道师@七牛云   Docker最开始采用AUFS作为文件系统 ...

  6. 【转帖】sysbench的安装和做性能测试

    iMySQL | 老叶茶馆 sysbench的安装和做性能测试 http://imysql.cn/node/312 我仿照这个学的 但是 需要用更新的版本才可以.   By yejr on 14 六月 ...

  7. 性能测试知多少---系统架构分析 转自https://yq.aliyun.com/articles/35147?spm=5176.100239.blogcont24251.8.lS96At

    摘要: 有些事儿一旦放一放就难再拾起来,突然发现<性能测试知多少>这个系列两月没更新,关键时我都不知道啥时候放下的,总容易被各种技术所吸引走,如饥似渴的想学更多的东西,这几天一直有朋友问我 ...

  8. jemalloc优化MySQL、Nginx内存管理

    上一篇文章<TCMalloc优化MySQL.Nginx.Redis内存管理>,下面来看下jemalloc jemalloc源于Jason Evans 2006年在BSDcan confer ...

  9. Firefly 性能测试 报告

    原地址:http://bbs.gameres.com/thread_223724.html Firefly 性能测试 主要考虑点 网络IO的并发 进程间通信压力 数据读写压力 测试机配置: 操作系统 ...

  10. JMeter性能测试中控制业务比例

    性能测试混合场景中,我们需要组合多个业务操作到场景中来.比如有一个论坛的业务分布如下:发布新帖与回复帖子的比例为2:3,那么我们在JMeter测试计划中如何控制其比例呢? 可以通过以下两种方式解决:多 ...

随机推荐

  1. k8s卷管理-1

    目录 卷管理-1 1. 本地存储 1.1 emptyDir 1.2 hostPath 网络存储 搭建NFS服务器 使用NFS网络存储 搭建iSCSI服务器 使用iSCSI网络存储 卷管理-1 我们之前 ...

  2. Swagger系列:Spring Boot 2.x集成Spring Doc(Swagger 3.0)

    目录 一.简介 1.SpringFox工具(不推荐) 2.SpringDoc工具(推荐) 二.集成 1.环境 1. 引入Maven依赖 2.配置SpringDocConfig(配置类方式) 3.配置S ...

  3. Prometheus 快速入门

    Prometheus&Grafana快速入门 一.prometheus简介 prometheus是监控多个大数据组件的监控系统.Prometheus是由SoundCloud开发的开源监控报警系 ...

  4. 一文带你熟悉Pytorch->Caffe->om模型转换流程

    摘要:本文旨在分享Pytorch->Caffe->om模型转换流程. 标准网络 Baseline:PytorchToCaffe 主要功能代码在: PytorchToCaffe +-- Ca ...

  5. 5种Python使用定时调度任务的方式

    摘要:Python 有几种方法可以定时调度一个任务,这就是我们将在本文中学习的内容. 本文分享自华为云社区<Python中使用定时调度任务(Schedule Jobs)的5种方式)>,作者 ...

  6. 从5个函数带你理解K8s DeltaFIFO

    摘要:DeltaFIFO是K8s中用来存储处理数据的Queue,相较于传统的FIFO,它不仅仅存储了数据保证了先进先出,而且存储有K8s资源对象的类型.是连接Reflector(生产者)和indexe ...

  7. SparkSQL高并发:读取存储数据库

    摘要:实践解析如何利用SarkSQL高并发进行读取数据库和存储数据到数据库. 本文分享自华为云社区<SarkSQL高并发读取数据库和存储数据到数据库>,作者:Copy工程师 . 1. Sp ...

  8. linux 只查看 java 进程

    top $(ps -e | grep java | awk '{print $1}' | sed 's/^/-p/')

  9. websever

    1 在浏览器键入url,按下回车会经历如下行为 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址; 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TC ...

  10. 【python爬虫】 request模块介绍 http协议版本区别 双token认证 携带cookie的两种方式 requests.session的使用 post请求携带数据编码格式 request.text编码问题 下载图片,视频

    目录 上节回顾 今日内容 1 爬虫介绍 2 request模块介绍 3 request发送get请求 4 request携带参数 5 url编码解码 6 携带请求头 http协议版本之间的区别 7 发 ...