The Good, the Bad, and the Leaky: jemalloc, bumpalo, and mimalloc in meilisearch
Meilisearch의 메모리 누수 문제를 조사하며, jemalloc, bumpalo, mimalloc 세 가지 메모리 할당기(allocator)를 비교 분석하였습니다.
특히, bumpalo의 into_bump_slice 메서드 사용 시 std::Vec를 내부에 저장하는 실수가 장기적인 메모리 누수 원인임을 발견하고 수정하였습니다.
또한, LMDB(C 기반 라이브러리)와 Meilisearch가 서로 다른 메모리 할당기를 사용하면서 발생하는 메모리 재활용 문제를 확인하였고, 이를 해결하기 위해 jemalloc을 전역 할당기로 통일하여 메모리 누수가 해소됨을 확인하였습니다.
마지막으로, mimalloc v3를 도입해 LMDB와 Meilisearch가 동일한 할당기를 사용하도록 개선하였으며, 이로 인해 메모리 사용량이 크게 줄고 성능도 향상되어 실무 환경에서의 효율성이 높아졌음을 입증하였습니다.
이 연구는 메모리 할당기 선택과 라이브러리 간 할당기 통합이 대규모 데이터 인덱싱 시스템에서 메모리 누수와 성능에 미치는 영향을 구체적으로 보여줍니다.
