jemalloc编译出错?没事,这里有成功的linux环境的编译及使用方案(★firecat推荐★)

简介: jemalloc编译出错?没事,这里有成功的linux环境的编译及使用方案(★firecat推荐★)

jemalloc是facebook推出的


https://github.com/jemalloc/jemalloc


http://jemalloc.net/


源码里面有INSTALL.md,里面有安装说明,但是不可完全参照,需要调整步骤如下:


先准备好gcc编译环境,然后把docbook-style-xsl依赖库安装好。


[root@localhost ]# yum -y install docbook-style-xsl


如果没有docbook-style-xsl,运行make dist会报错:


[root@localhost ]# make dist

/usr/bin/xsltproc -o doc/jemalloc.html doc/html.xsl doc/jemalloc.xml

warning: failed to load external entity "/html/docbook.xsl"

compilation error: file doc/html.xsl line 2 element import

xsl:import : unable to load /html/docbook.xsl

make: *** [doc/jemalloc.html] Error 5


正式开始编译:


chmod -R 777 jemalloc-4.5.0


cd  jemalloc-4.5.0


./autogen.sh --with-jemalloc-prefix=je_

make dist

make

make install



最终头文件和库文件的安装路径分别是:


usr/local/include/jemalloc

usr/local/lib



本人环境是CentOS 7.3,gcc版本是4.8.5。


请注意:


(1)chmod这个步骤很重要,否则jemalloc文件夹下有大量.sh文件,最终会因为没有权限而编译失败。


(2)./autogen.sh 务必带上参数!即 "./autogen.sh --with-jemalloc-prefix=je_",否则将来编程调用时会报错,例如:


undefined reference to `je_malloc'


undefined reference to `je_realloc'



CMakeList.txt文件


cmake_minimum_required(VERSION 2.8)

project(myDemo)

SET(JEMALLOC_INCLUDE_DIR /usr/include/jemalloc)

SET(JEMALLOC_LIB /usr/local/lib)

INCLUDE_DIRECTORIES(${JEMALLOC_INCLUDE_DIR})

LINK_DIRECTORIES(${JEMALLOC_LIB})

#ADD_EXECUTABLE必须在TARGET_LINK_LIBRARIES前面,否则会报错

ADD_EXECUTABLE(${PROJECT_NAME} main.c)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} jemalloc)



----


引申阅读TCMalloc

TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一个内存管理库,所以一般提到tcmalloc,其实就是指使用gperftools,编译tcmalloc也就是编译gperftools。 与标准的glibc库中malloc相比,TcMalloc在内存分配的效率和速度上要高很多,可以提升高并发情况下的性能,降低系统的负载。


TcMalloc比glibc的malloc具有更高的效率。如在主频为2.84GH的pc上,Glibc的malloc需要使用300ns的时间来执行malloc/free对,而tcmalloc只需要50ns来完成相同的操作(数据来自官方文档)。


TcMalloc使用线程内存池的方法,小对象(<=32K)是在内存池中进行分配,使用分配较多的内存空间来优化分配时间,并定时进行垃圾回收操作。而大对象(>32K)则直接在全局控制堆中分配。Tcmalloc可以有效减小多线程间的锁争用问题,对于小对象,甚至可以实现0争用。


TCMalloc是gperftools的一部分,除TCMalloc外,gperftools还包括heap-checker、heap-profiler和cpu-profiler。


https://github.com/gperftools/gperftools


https://www.jianshu.com/p/11082b443ddf


相关文章
|
7天前
|
监控 机器人 Unix
GoLand——windows下如何编译Linux二进制文件
GoLand——windows下如何编译Linux二进制文件
15 1
GoLand——windows下如何编译Linux二进制文件
|
2天前
|
Ubuntu Linux Windows
如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
请注意,在WSL1中可能会由于内核架构限制而无法成功进行以上过程,WSL2对于Linux内核的完整支持更为合适。此外,部分步骤可能因不同的Linux发行版或内核版本而异。
9 4
|
2天前
|
架构师 Linux Shell
Linux环境下要想事半功倍,少不了这4个技巧!
Linux环境下要想事半功倍,少不了这4个技巧!
|
5天前
|
Linux C语言 Windows
Linux环境下运行介绍
1. 文件编程函数介绍 如果在Linux系统下学习C语言,就会了解到两套文件编程接口函数: C语言标准的文件编程函数: fopen、fread、fwrite、fclose Linux下提供的文件编程函数: open、read、write、close 传参的区别: 基于文件指针: fopen fclose fread fwrite 比较适合操作普通文件。 基于文件描述符: open close read write 比较适合操作设备文件。 2. C语言标准库提供的文件编程函数 下面介绍C语言标准库提供的文件编程函数,一般对文件常用的操作就是:创建(打开)、读、写、关闭。 其他的
19 1
|
7天前
|
关系型数据库 数据库 PostgreSQL
Linux 环境手动备份postgresql数据库
【8月更文挑战第12天】在Docker环境中使用命令行工具对PostgreSQL数据库进行备份和恢复。首先,通过dockerexec进入容器,使用pg_dump进行数据库模式的备份,然后使用dockercp将备份文件导出。接着,若需导入数据到另一数据库,先将备份文件复制到目标容器,再利用psql命令进行数据恢复。整个过程需确保目标数据库无同名模式,以防止导入失败
15 3
|
3天前
|
机器学习/深度学习 Linux Shell
超详细的Linux-Conda环境安装教程
超详细的Linux-Conda环境安装教程
|
5天前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
16 0
|
5天前
|
Java Linux 编译器
【Linux】gcc简介+编译过程
【Linux】gcc简介+编译过程
|
5天前
|
NoSQL 关系型数据库 MySQL
Linux学习记录---(1、基本命令)
该博客文章提供了Linux系统中基本命令的使用记录,包括文件和目录操作、Redis服务管理、MySQL数据库操作以及Tomcat服务器的启动和检查。
Linux学习记录---(1、基本命令)
|
3天前
|
Linux
会玩这10个Linux命令,一定是个有趣的IT男!
会玩这10个Linux命令,一定是个有趣的IT男!