본문 바로가기

리눅스

[WIP] 우분투에서 jemalloc을 설치하고 적용하는 방법

728x90

우분투에서 jemalloc을 설치하고 적용하는 방법

jemalloc은 기본 glibc malloc 대비 메모리 단편화(fragmentation)를 줄이고 멀티스레드 환경에서 성능을 개선하는 메모리 할당 라이브러리입니다.

특히 Redis, Nginx, DB 등에서 성능 개선 효과가 검증되어 널리 사용됩니다.

 

jemalloc의 장점

  • 멀티스레드 환경에서 높은 성능
  • 메모리 단편화 감소
  • 메모리 사용량 절감
  • 락 경합(lock contention) 최소화

1. jemalloc 설치

우분투에서는 패키지로 간단하게 설치할 수 있습니다.

sudo apt-get update
sudo apt-get install -y libjemalloc-dev libjemalloc2

2. 설치 확인

설치 후 시스템에 라이브러리가 정상 등록되었는지 확인합니다.

ldconfig -p | grep libjemalloc
$ ldconfig -p | grep libjemalloc
        libjemalloc.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libjemalloc.so.2
        libjemalloc.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libjemalloc.so

3. 라이브러리 경로 확인

시스템에서 참조하는 라이브러리 경로도 확인해두는 것이 좋습니다.

$ cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf 
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

4. jemalloc 적용 방법

방법 1 : 특정 프로세스에만 적용 (권장)

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 nginx

방법 2: 사용자 환경에 적용 (~/.bashrc)

echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2' >> ~/.bashrc

변경 사항 적용

source ~/.bashrc
해당 사용자 세션에서 실행되는 모든 프로세스에 적용됨

방법3: systemd 서비스에 적용 (실무 권장)

  • 서비스 단위로 적용하는 것이 가장 안전합니다.
sudo systemctl edit nginx

내용 추가

[Service]
Environment="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"

적용

sudo systemctl daemon-reexec
sudo systemctl restart nginx

5. 적용 여부 확인

실행 중인 프로세스가 jemalloc을 사용하는지 확인

cat /proc/<PID>/maps | grep jemalloc

또는

lsof -p <PID> | grep jemalloc

6. jemalloc 튜닝 옵션

환경 변수로 세부 동작을 조정할 수 있습니다.

export MALLOC_CONF="background_thread:true,dirty_decay_ms:5000,muzzy_decay_ms:5000"

주요 옵션

  • background_thread : 백그라운드 메모리 정리 활성화
  • dirty_decay_ms : 해제된 메모리 반환 시간
  • muzzy_decay_ms : OS 반환 정책

 

참고URL

- jemalloc : memory allocator

- Ubuntu packages : libc6-dbg

 

728x90