Как сказано на http://jemalloc.net/ :
jemalloc — это реализация malloc(3) общего назначения, которая акцентирует внимание на избежании фрагментации и поддержке масштабируемой параллельности.
Некоторые пользователи Sphinx и Manticore Search предпочитают jemalloc вместо malloc и говорят, что это позволяет сэкономить немного ОЗУ. Я тестировал, как jemalloc влияет на потребление ресурсов и время отклика в течение 2 недель на 3 кластерах Manticore (se03/03-2, se04/04-2, se05/05-2), каждый из которых:
- получал одинаковое количество трафика
- хранил примерно одинаковое количество данных
- имел 2 сервера Manticore, полностью идентичных по аппаратному и программному обеспечению, с 100% идентичными индексами и даже балансировкой нагрузки между серверами
На se03 и se03-2 я включил jemalloc и отключил THP (прозрачные большие страницы) и перезапустил Manticore на se03-2
На se04-2 я просто перезапустил Manticore, я не трогал se04. se04/04-2 — это контрольная группа.
На se05-2 я включил jemalloc, но не отключил THP
Вот что я получил за 2 недели:
RSS потребление ОЗУ:
Динамика задержки (я использовал скользящее среднее (время отклика)):
Сводная статистика задержки:

Выводы:
- RSS ОЗУ: включение jemalloc с отключением или без отключения THP снижает потребление RSS ОЗУ процессом searchd на **5-6%**2)
- включение jemalloc без отключения THP (se05-2) значительно ухудшает задержку: ср. (время отклика) - на 23%, 95/99p могут не пострадать, так как различия находятся в пределах погрешности (см. контрольную группу se04/04-2, где ничего не изменялось)
- включение jemalloc с отключением THP (se03-2) дает:
- ср. задержка на 10% лучше**
- 95% задержка на 8% хуже
- 99% задержка на 3.6% лучше, но это в пределах погрешности, так что мы не можем это учитывать
Таким образом, в этом случае нам нужно решить, что мы предпочитаем:
- сэкономить 5% ОЗУ и получить на 10% лучшее среднее время задержки, но более высокие всплески задержки для 5% более тяжелых запросов
- или оставить все как есть: без экономии ОЗУ, худшее среднее время задержки, но лучшая задержка для более тяжелых запросов
Результаты могут зависеть от многих факторов: аппаратного обеспечения, нагрузки (количество данных, OPS и т.д.), но кажется, что jemalloc — это интересная вещь, которую стоит попробовать, и она может сэкономить немного ОЗУ/денег, особенно в крупных установках, где экономия 5% может означать, что не нужно покупать несколько новых серверов.
Дайте нам знать, если вам нужна наша помощь с применением этого на вашей установке. Мы также можем помочь вам с другими оптимизациями производительности и ресурсов.
P.S. Спасибо https://www.sphinxconnector.net/ за идею попробовать jemalloc.
