2026 年到底还有谁在坚持 jemalloc?(很多大项目)
摘要
2025 年被归档后,Meta 接管了 jemalloc 仓库,让这个曾经停滞的 malloc 实现重新恢复维护。
<p><a href="https://lobste.rs/s/vr4rsc/who_even_uses_jemalloc_2026_anyway_many">评论</a></p>
查看缓存全文
缓存时间: 2026/04/23 10:53
# 2026 年了,到底还有谁在用它?(很多大项目)
来源:https://theconsensus.dev/p/2026/04/16/who-even-uses-jemalloc-anyway.html
jemalloc 是一个专为长生命周期、多线程程序设计的 malloc 替代实现,内置内存剖析和泄漏调试工具。原作者兼最大贡献者 Jason Evans 于 2006 年左右为 FreeBSD 发布([论文](https://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf),至今仍在使用),并在 Meta 持续迭代十年。
在 Linux 上,只要程序用的是系统 `malloc`,换用替代实现通常零代码改动:设个 `LD_PRELOAD=/path/to/my_alt_malloc.so` 就可能换来更低内存、更快分配。
可选方案很多:Google 有 [tcmalloc](https://github.com/google/tcmalloc)(2009 年随 gperftools 1.0 放出,2020 年才单独开源);Microsoft 有 [mimalloc](https://github.com/microsoft/mimalloc)(2019 年 1.0)和 [snmalloc](https://github.com/microsoft/snmalloc)(尚未 1.0)。
这些 malloc 的用户分布得另开一篇,今天先聚焦 jemalloc。
Jason 离开 Meta 后,对 jemalloc 的贡献骤减;社区维护在 2020 年达到高峰,随后归于沉寂。
于是[舆论](https://news.ycombinator.com/item?id=38461735)和[基准](https://github.com/daanx/mimalloc-bench)开始倾向 tcmalloc、mimalloc。
2025 年,jemalloc 仓库被[悄然归档](https://x.com/OnlyXuanwo/status/1929504028863369416),社区哗然;Jason 随后发表[项目回顾](https://jasone.github.io/2025/06/12/jemalloc-postmortem/)。
不少[项目](https://github.com/pola-rs/polars/issues/23222)开始讨论迁移。与此同时,Meta 的[fork](https://github.com/facebook/jemalloc)仍在内部演进。
上个月,Meta[宣布](https://engineering.fb.com/2026/03/02/data-infrastructure/investing-in-infrastructure-metas-renewed-commitment-to-jemalloc/)与 Jason 达成协议,接管并解封主仓库,一次性合并 70 个内部 commit,发布[四年来首个版本 5.3.1](https://github.com/jemalloc/jemalloc/releases)。
大家都弃坑了吗?我排查了历史上用过 jemalloc 的主要项目:
Rust 标准库、Apache Arrow 确实早已迁走(发生在开发降温之前);**反倒有些项目在近两年主动切到 jemalloc**。
它仍是主流替代分配器之一,下面逐一看。
## 调查方法
除官方文档明确声明外,我会:
1) 查看打包脚本是否安装 jemalloc;
2) 在 Linux/AMD64 预编译包中用 `strings` 搜 `jemalloc` 符号。
缺点:仅链接不一定启用;且多数项目编译时可自由开关。下文结果仅供参考。
## 项目现状
| 项目 | 状态 |
|---|---|
| Apache Arrow | 2024 年 18.0.0 起[默认改用 mimalloc](https://github.com/apache/arrow/pull/40875)。 |
| Polars | 2022 年[从 mimalloc 切回 jemalloc](https://github.com/pola-rs/polars/pull/3108),称基准全面领先;归档事件后用户[提议再迁出](https://github.com/pola-rs/polars/issues/23222),但[官方文档](https://docs.pola.rs/api/rust/dev/polars/#notes)仍写明使用 jemalloc。 |
| Redis / Valkey | 官方 README 写明 Linux 下默认 jemalloc。 |
| Rust | 标准库 2018 年[移除 jemalloc](https://github.com/rust-lang/rust/pull/55238),但**编译器本体仍链 jemalloc**:<br>`strings $(rustup which rustc) \| grep jemalloc` 能命中 48 处;`MALLOC_CONF=stats_print:true rustc --version` 会打印 jemalloc 统计。 |
| ClickHouse | [官方文档](https://clickhouse.com/docs/operations/allocation-profiling)写明使用 jemalloc。 |
| TiKV | 2019 年评估 mimalloc/tcmalloc 无收益,[至今仍是 jemalloc](https://github.com/tikv/tikv/issues/5571)(feature flag 可见 `jemalloc`)。 |
| Vinyl Cache(原 Varnish Cache) | [官方编译文档](https://vinyl-cache.org/docs/trunk/installation/install_source.html#build-dependencies-on-debian-ubuntu)要求 jemalloc。 |
| FreeBSD / NetBSD | 系统默认 malloc 仍是 jemalloc。 |
| Cassandra | 启动时若未检测到 jemalloc 会[提示警告](https://github.com/apache/cassandra/blob/cassandra-5.0/src/java/org/apache/cassandra/service/StartupChecks.java#L260);官方 Docker 镜像[默认启用](https://github.com/docker-library/cassandra/blob/master/5.0/Dockerfile#L18)。 |
| Rails | 自带 Dockerfile 模板[默认链 jemalloc](https://github.com/rails/rails/blob/8-1-stable/railties/lib/rails/generators/rails/app/templates/Dockerfile.tt#L23)。 |
| MariaDB | 非强制,但[官方最佳实践](https://mariadb.com/docs/server/server-management/install-and-upgrade-mariadb/compiling-mariadb-from-source/compiling-mariadb-with-extra-modulesoptions/using-mariadb-with-tcmalloc-or-jemalloc)推荐高并发场景用 jemalloc。 |
| DuckDB | Linux 官方二进制[内置 jemalloc](https://duckdb.org/docs/current/core_extensions/jemalloc#linux)。 |
| Firefox | [源码](https://github.com/mozilla-firefox/firefox/blob/main/memory/build/mozmemory.h)仍基于 jemalloc。 |
| GreptimeDB | 1.0.0-rc.2 二进制中 `strings` 命中 103 处 jemalloc 符号。 |
| Apache Flink | 官方 Docker 镜像[默认 jemalloc](https://nightlies.apache.org/flink/flink-docs-release-2.2/docs/deployment/resource-providers/standalone/docker/#switching-the-memory-allocator)。 |
| QuestDB | [启动脚本](https://github.com/questdb/questdb/blob/9.3.0/core/src/main/bin/questdb.sh#L153)默认 jemalloc。 |
| Materialize | [非 macOS 平台默认 jemalloc](https://github.com/MaterializeInc/materialize/blob/v26.20.0/src/alloc-default/Cargo.toml#L15)。 |
| rust-analyzer | [PR 已合并](https://github.com/rust-lang/rust-analyzer/pull/21392),Linux 发行版将默认启用 jemalloc。 |
| Restate | [默认启用 jemalloc](https://github.com/restatedev/restate/blob/v1.6.2/server/Cargo.toml#L94)。 |
## 未来可期
历史上拥抱 jemalloc 的大户大多并未迁走;tcmalloc、mimalloc、snmalloc 的崛起让竞争更充分,最终受益的是用户。
感谢 Jason Evans 的奠基,也感谢仍在维护 jemalloc 的开发者们,让它继续在如此多项目中发光发热。
—— Phil Eaton,The Consensus 创始人
相似文章
mimalloc:面向现代时代的新型高性能可扩展内存分配器
mimalloc 是一个开源、高性能、可扩展的内存分配器,可作为 malloc 和 free 的直接替代品。它专为现代高并发应用和大内存规模而设计,被用于 Bing 等主要服务,并集成到 NoGIL CPython 和 Unreal Engine 等项目中。
Meta 通过定制桥接芯片在新服务器中复用旧内存
Meta 开发了一款定制 CXL 桥接芯片(Vistara),用于在新服务器中复用旧 DIMM,以解决内存短缺问题并降低成本,同时不会显著影响性能。
@jundotkim: oMLX 0.3.9rc1 发布。亮点:- 低内存Mac保持稳定,不再被系统杀死 - DFlash 升级至…
oMLX 0.3.9rc1,一个为Apple Silicon Mac优化的LLM推理服务器,增加了低内存稳定性、分块预填充、多任务管理聊天等功能。
面向 Morello 的 Rust:始终在线内存安全,即使在非安全代码中
本文介绍了一种针对 Morello 能力硬件架构修改的 Rust 编译器,通过利用硬件能力,实现即使在非安全代码中也始终在线内存安全。
Mercurial, 20年并持续:我们如何依然活跃?[视频]
这场FOSDEM 2026演讲探讨了分布式版本控制系统Mercurial如何在诞生20年后依然保持活跃和竞争力,尽管在人气上败给了Git。演讲者讨论了该项目的历史、社区、技术创新以及对版本控制未来的启示。