blog-post

对 Jemalloc 的研究

http://jemalloc.net/ 所述:

jemalloc 是一个通用的 malloc(3) 实现,强调避免碎片化和可扩展的并发支持。

一些 Sphinx 和 Manticore Search 用户更喜欢 jemalloc 而不是 malloc,并表示它可以节省一些 RAM。我测试了 jemalloc 对资源消耗和响应时间的影响,持续了 2 周,在 3 个 Manticore 集群上(se03/03-2,se04/04-2,se05/05-2),每个集群:

  • 接收相同数量的流量
  • 托管大约相同数量的数据
  • 拥有 2 台在硬件、软件方面完全相同的 Manticore 服务器,并且索引 100% 相同,甚至在服务器之间进行负载均衡

在 se03 和 se03-2 上,我启用了 jemalloc 并禁用了 THP(透明大页),并在 se03-2 上重启了 Manticore
在 se04-2 上,我只是重启了 Manticore,没有触碰 se04。se04/04-2 是一个对照组。
在 se05-2 上,我启用了 jemalloc,但没有禁用 THP

这是我在 2 周内得到的结果:

RSS RAM 消耗:

jemalloc_rss延迟动态(我使用了移动平均(响应时间)):

jemalloc_latency_1汇总延迟统计:

jemalloc_latency_2

结论:

  1. RSS RAM:启用 jemalloc 无论是否禁用 THP,都使 searchd 的 RSS RAM 消耗减少了 **5-6%**2)
  2. 启用 jemalloc 而不禁用 THP(se05-2)使延迟 显著变差:平均(响应时间) - 增加 23%,95/99p 可能不受影响,因为差异在误差范围内(参见 se04/04-2 的对照组,那里没有任何变化)
  3. 启用 jemalloc 禁用 THP(se03-2)使得:
    • 平均延迟改善 10%**
    • 95% 延迟变差 8%
    • 99% 延迟改善 3.6%,但这在误差范围内,因此我们不能算这个

所以在这种情况下,我们需要决定我们更喜欢什么:

  1. 节省 5% RAM 并且平均延迟改善 10%,但对于 5% 较重请求的延迟峰值更高
  2. 或者保持现状:没有 RAM 节省,平均延迟变差,但对于较重查询的延迟更好

结果可能依赖于许多因素:硬件、工作负载(数据量、OPS 等),但看起来 jemalloc 是一个值得尝试的有趣东西,尤其是在大型安装中,节省 5% 可能意味着不需要购买几台新服务器。

如果您需要我们在您的安装中应用它的帮助,请告诉我们。我们也可以帮助您进行其他性能和资源优化。

P.S. 感谢 https://www.sphinxconnector.net/ 提出尝试 jemalloc 的想法。

安装Manticore Search

安装Manticore Search