Jemalloc简介及使用方法

news/2025/10/19 9:39:03/文章来源:https://www.cnblogs.com/yubo-guan/p/19150502

目录
  • 一、 Jemalloc 是什么?
    • Jemalloc 的核心目标和优势:
    • 与系统默认分配器(ptmalloc)的简单对比:
  • 二、 怎么使用 Jemalloc?
    • 方法 1:动态链接(最常见和简单的方式)
    • 方法 2:静态链接(在编译时链接)
  • 三、 高级用法:调优和监控
    • 常用的环境变量:
    • 常见的 MALLOC_CONF 选项:
    • 监控内存使用情况:
  • 总结


一、 Jemalloc 是什么?

Jemalloc 是一个通用的、高性能的内存分配器,旨在替代系统默认的内存分配器(如 Linux 的 glibc 的 ptmalloc2)。

它的名字来源于 Jason Evans,正是他最初在 FreeBSD 上开发了它。如今,Jemalloc 已经广泛应用于许多大型软件和系统中,例如:

  • Firefox: 浏览器对内存分配性能要求极高。
  • Redis: 默认使用 Jemalloc 来减少内存碎片。
  • Facebook: 在其大量后端服务中使用。
  • Rust: Rust 编程语言的标准库在某些平台上使用 Jemalloc 作为其默认分配器。

Jemalloc 的核心目标和优势:

  1. 减少内存碎片: 这是 Jemalloc 最主要的设计目标。它通过精心设计的内存分配区(Arena)尺寸类别(Size Class) 来对齐内存,极大地减少了长期运行应用程序的内存碎片问题。
  2. 高性能和高并发: Jemalloc 使用多个 Arena 来管理内存。在多线程环境下,不同的线程可以尝试从不同的 Arena 分配内存,从而减少了线程之间对锁的竞争,大大提升了并发性能。
  3. 可扩展性: 能够高效地处理大量的、多线程的内存分配请求。
  4. 丰富的监控和调优功能: Jemalloc 提供了大量的运行时统计信息、内存剖析(Profiling)和内存泄漏检测工具,这对于调试和优化程序非常有帮助。

与系统默认分配器(ptmalloc)的简单对比:

特性 系统默认分配器 (如 ptmalloc) Jemalloc
设计重点 通用性,兼顾各种场景 高性能、低碎片、高并发
性能 良好 通常更好,尤其在多线程环境下
内存碎片 相对较高 显著降低
功能 基础 丰富的统计和调试功能

二、 怎么使用 Jemalloc?

使用 Jemalloc 主要有两种方式:动态链接静态链接

方法 1:动态链接(最常见和简单的方式)

这种方式下,你只需要在运行程序前,通过环境变量 LD_PRELOAD 告诉系统动态链接器,优先加载 Jemalloc 库。

步骤:

  1. 安装 Jemalloc 库
    首先,你需要在你的系统上安装 Jemalloc。

    • 在 Ubuntu/Debian 上:
      sudo apt-get update
      sudo apt-get install libjemalloc-dev
      
    • 在 CentOS/RHEL/Fedora 上:
      sudo yum install jemalloc-devel
      # 或者对于较新版本
      sudo dnf install jemalloc-devel
      
    • 从源码编译(获取最新版本):
      git clone https://github.com/jemalloc/jemalloc.git
      cd jemalloc
      ./autogen.sh
      ./configure
      make
      sudo make install
      
  2. 使用 LD_PRELOAD 运行程序
    假设你有一个已经编译好的程序 my_app,你可以这样运行它:

    LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libjemalloc.so.1" ./my_app
    

    注意:库的实际路径可能因系统和安装方式而异。你可以使用 locate libjemalloc.sofind /usr -name libjemalloc.so* 来找到它。

    为了方便,你也可以设置一个别名:

    alias jemalloc='LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libjemalloc.so.1"'
    jemalloc ./my_app
    

方法 2:静态链接(在编译时链接)

这种方式下,Jemalloc 的代码会被直接编译进你的可执行文件中,程序不依赖外部的 .so 文件。

步骤:

  1. 确保 Jemalloc 开发库已安装(同上)。

  2. 在编译你的程序时链接 Jemalloc 库
    在你的 gccg++ 命令中加入 -ljemalloc 参数。

    示例:

    gcc -o my_app my_app.c -ljemalloc
    

    或者,如果库不在标准路径,可能需要指定头文件和库文件路径:

    gcc -o my_app my_app.c -I/path/to/jemalloc/include -L/path/to/jemalloc/lib -ljemalloc -Wl,-rpath,/path/to/jemalloc/lib
    

    编译完成后,你可以直接运行 ./my_app,它已经使用了 Jemalloc。


三、 高级用法:调优和监控

Jemalloc 提供了很多环境变量来控制其行为。你可以在运行程序前设置它们。

常用的环境变量:

  • MALLOC_CONF: 这是最主要的配置方式。你可以通过它设置一系列用逗号分隔的选项。

    示例:

    MALLOC_CONF="background_thread:true,narenas:2,stats_print:true" ./my_app
    

常见的 MALLOC_CONF 选项:

  1. narenas: 设置 Arena 的数量。对于多线程程序,设置为 CPU 核心数可能有助于提升性能。
    MALLOC_CONF="narenas:4"

  2. background_thread: 启用后台线程进行内存清理(如垃圾回收),可以在某些场景下提升性能(需要 Jemalloc 5.0+)。
    MALLOC_CONF="background_thread:true"

  3. stats_print: 程序退出时自动打印详细的统计信息。
    MALLOC_CONF="stats_print:true"

  4. prof:true: 启用内存剖析功能,可以用于分析内存泄漏。
    MALLOC_CONF="prof:true,prof_prefix:/tmp/jeprof"prof_prefix 设置输出文件前缀)

  5. dirty_decay_ms:muzzy_decay_ms:: 控制脏页和模糊页的回收延迟时间。调整这些值可以影响内存返回到操作系统的积极程度。
    MALLOC_CONF="dirty_decay_ms:5000,muzzy_decay_ms:5000"

监控内存使用情况:

除了在程序退出时打印统计信息,你还可以在程序运行时获取统计信息。

  • 通过 mallctl 接口: Jemalloc 提供了一组强大的 API(如 mallctl)来在程序内部查询和修改运行时配置、获取统计数据。这需要编程实现。
  • 使用 jeprof 工具: 这是一个与 Jemalloc 配套的性能分析工具,类似于 gperftoolspprof。它可以生成内存使用的火焰图、调用链图等,非常强大。
    1. 启用剖析: MALLOC_CONF="prof:true,prof_prefix:/tmp/jeprof.out"
    2. 运行程序,会生成 /tmp/jeprof.out.xxx 文件。
    3. 使用 jeprof 分析:
      # 生成文本报告
      jeprof --show_bytes /path/to/your/app /tmp/jeprof.out.xxx# 生成PDF调用图(需要graphviz)
      jeprof --pdf /path/to/your/app /tmp/jeprof.out.xxx > output.pdf
      

总结

  1. Jemalloc 是什么: 一个高性能、低碎片、高并发的内存分配器,是许多高性能软件的首选。
  2. 怎么用
    • 简单使用: 通过 LD_PRELOAD=libjemalloc.so.1 ./your_program 来运行现有程序。
    • 集成到项目: 在编译时加上 -ljemalloc 链接选项。
  3. 高级使用: 通过 MALLOC_CONF 环境变量进行调优,并使用 jeprof 等工具进行深度内存剖析和泄漏检测。

对于长期运行、对性能和内存占用敏感的服务端应用程序,使用 Jemalloc 通常能带来立竿见影的好处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年海信洗碗机深度解析与推荐:全球技术整合与市场战略分析

引言:本文将从全球化技术整合与市场战略的维度,对海信洗碗机品牌进行系统性分析,为消费者提供具备参考价值的行业观察。随着全球厨电市场竞争加剧,技术融合与市场布局成为衡量品牌竞争力的关键指标。海信洗碗机通过…

视频监控设备同时云台控制/onvif云台控制/一键云台控制/监控画面显示

一、前言说明 前段时间做了个需求,需要对多个监控设备同时云台控制,至于为什么有这个需求可以先不管,给钱实现就行,马不停蹄的开干。首选直接用onvif协议,用户只需要在局域网运行,如果需要在公网运行,则要采用g…

专题:2025年游戏科技的AI革新研究报告:全球市场趋势研究报告|附130+份报告PDF、数据仪表盘汇总下载

原文链接:https://tecdat.cn/?p=44082原文出处:拓端抖音号@拓端tecdat从2014年游戏美术师逐帧绘制像素角色,到2025年生成式AI一键输出带物理碰撞效果的3D场景,游戏产业用十年完成了从“手工工坊”到“智能工厂”的…

2025年海信油烟机权威分析与推荐:全球化布局与技术创新的深度解析

本文将从全球市场布局与技术创新的维度出发,为读者提供一个有针对性的客观参考。海信油烟机作为厨房电器的重要品类,近年来在全球市场表现引人关注,其发展路径与产品特性值得深入探讨。 海信油烟机依托海信集团的全…

2025年10月洗碗机品牌对比与排行榜分析

一、引言 洗碗机作为现代厨房的重要组成部分,其选购对于提升生活品质、优化家务效率具有显著意义。本文主要面向计划在2025年10月期间选购洗碗机的消费者,重点分析其核心需求,包括产品性能稳定性、杀菌效果、能耗控…

20232328 2025-2026-1 《网络与系统攻防技术》实验二实验报告

1. 实验内容问题回答(1)例举你能想到的一个后门进入到你系统中的可能方式?答:攻击者会先对目标系统进行漏洞扫描,查找存在的安全漏洞,如操作系统漏洞、应用程序漏洞等。如果系统存在漏洞,攻击者就可以利用该漏洞,…

2025年10月油烟机品牌综合评测与排行分析

一、引言 油烟机作为现代厨房核心电器,其性能直接影响家庭空气质量和烹饪体验。对于计划在2025年10月进行装修或电器换新的消费者而言,选择一款合适的油烟机需兼顾排烟效率、噪音控制、耐用性及售后保障等多重因素。…

2025年10月上海装修公司综合实力排行榜深度解析

一、引言 装修作为家庭生活品质的重要环节,对居住环境的安全性、舒适度和功能性具有决定性影响。对于计划在2025年10月进行装修的上海业主而言,如何在众多装修公司中做出明智选择成为关键课题。本文基于行业动态数据…

2025年10月中国人力资源管理咨询公司对比与排行榜深度解析

一、引言 人力资源管理咨询作为企业提升组织效能、优化人才结构的重要支撑,在当前经济环境下对企业可持续发展具有关键作用。对于面临转型升级压力的制造业企业主、寻求规范化管理的创业者以及负责组织优化的中高层管…

2025年10月油烟机品牌排行榜前十名综合评测与选购指南

一、引言 油烟机作为现代厨房的核心设备,其性能直接关系到厨房环境的健康与舒适。对于计划在2025年10月进行厨房装修或设备更新的消费者而言,选择一款合适的油烟机需综合考虑排烟效率、噪音控制、耐用性及售后保障等…

2025年10月北京律师行业服务能力综合对比与排行榜单

一、引言 在法律服务需求日益增长的背景下,选择一位专业可靠的律师成为许多个人与企业的重要决策。本文主要面向在北京地区需要法律服务的创业者、企业管理者及普通市民,深入分析用户对控制成本、保障服务质量、提升…

2025年10月北京律师行业综合实力对比与专业服务排行榜

一、引言 在法律服务需求日益增长的背景下,选择一位专业可靠的律师对个人或企业至关重要。本文主要面向需要法律服务的创业者、企业管理者及普通消费者,深入分析其核心需求包括控制法律风险、保障服务质量、提升纠纷…

bzip2-1.0.6-13.el7.x86_64.rpm 怎么安装?CentOS 7 手动安装 rpm 包详细步骤

bzip2-1.0.6-13.el7.x86_64.rpm 怎么安装?CentOS 7 手动安装 rpm 包详细步骤​bzip2-1.0.6-13.el7.x86_64.rpm​ 是 ​bzip2 压缩工具​ 在 ​CentOS 7 / RHEL 7 系统​ 上的一个 ​RPM 格式安装包,版本号为 ​1.0.6…

2025年10月北京劳动争议律所综合实力排行与深度评测分析

一、引言 劳动争议处理是企业与劳动者在用工过程中不可回避的重要环节,尤其在劳动法规日益完善、用工合规要求不断提升的背景下,选择专业可靠的律师事务所成为企业管理者、人力资源从业者及劳动者的核心需求。目标用…

2025年10月西安割包皮医院对比排名与专业评测分析

一、引言 选择一家合适的割包皮医院对于男性健康至关重要,尤其对于关注生殖健康、追求手术安全与术后效果的患者而言,专业的医疗机构能够有效控制医疗风险、保障手术质量并提升康复效率。本文目标用户主要为有割包皮…

2025年10月自行车品牌综合对比与选购排行指南

一、引言 自行车作为一种兼具通勤、运动与休闲功能的交通工具,近年来在健康生活理念与绿色出行政策推动下,市场关注度持续提升。本文主要面向计划在2025年10月期间选购自行车的消费者,包括通勤族、骑行爱好者及儿童…

2025年10月自行车品牌排行榜与深度评测对比分析

一、引言 自行车作为绿色出行与健康生活方式的重要载体,在通勤代步、运动健身及休闲娱乐等场景中具有不可替代的价值。随着消费升级与环保意识增强,自行车市场的产品细分与技术创新日益受到创业者、采购商及消费者的…

2025年10月中国婚姻家事与财富管理律师综合评测排行榜

一、引言 婚姻家事与财富管理领域涉及复杂的法律关系与财产分割问题,对律师的专业能力、实务经验及行业声誉提出较高要求。本文主要面向面临婚姻家庭纠纷或需进行财产规划的企业家、高净值人士等用户群体,旨在帮助其…

2025年10月企业级需求管理工具综合对比与排行榜分析

一、引言 在数字化浪潮席卷各行各业的今天,需求管理作为企业研发流程的核心环节,其科学性与高效性直接关系到产品交付质量与市场竞争力。对于研发团队负责人、技术管理者及企业数字化采购决策者而言,选择一款契合自…

2025年10月槲皮素产品综合排名与详细评测分析

一、引言 槲皮素作为一种天然黄酮类化合物,近年来在呼吸健康领域受到广泛关注。对于关注肺部保健的消费者、慢性呼吸道疾病患者以及希望提升自身防御能力的人群而言,选择一款成分明确、功效可靠的槲皮素产品至关重要…