본문 바로가기
DB/mysql | mariadb

마리아 db 메모리 누수현상

by devljy 2024. 9. 27.

참조 : https://www.webcomand.com/docs/admin_guide/configuration/mysqlmariadb/

 

 

클라우드 서버에 mariadb 애플리케이션을 운용하고있는데 , 

서버에서 차지하고있는 메모리가 조금씩 늘어가고 있는 현상이 포착되었다.

20240924_210403
20240926_120401
메모리가 계속 늘어나는 상황

 

 

 

사용중인 서버 스펙은  4 / 16 (cpu / ram) 이고 ,

mariadb 애플리케이션 외엔 어떠한 애플리케이션 or 컨테이너가 존재하지않는다 .  

 

이 상태가 유지된다면 서버의 메모리를 다 소모하여 서버가 정상적으로 유지되지 못할 거라고  예상했기 떄문에 ,

 해결방안 및 원인 파악을 시작했다. 

 

show variables like '%version%';

version_malloc_library 가 system 인모습

 

mariadb application 이 최적화된  malloc 라이브러리를 사용하지않고 ,

시스템 (OS ) 에서 기본으로 제공하는 기본 malloc 을 사용하고있었다.

웹에서 서칭한 바로는 malloc 함수가 제대로 메모리를 반환 하지않기때문에 

TC Malloc(구글) 또는 je malloc(facebook)  같이 최적화가 잘 되어있는 라이브러리를 사용해야만 누수현상이 해결 된다고한다.

 

밑으로는 TC Malloc 을 을 mariadb 에설정하는 과정이다.

 

TC Malloc은 개별로 제공되지않기때문에 yum 패키지관리자를 통하여  통째로다운로드 후 그안에있는 라이브러리를 사용한다. 

 

1.  yum install gperftools  (RHEL) 

yum install gperftools 후 isthis ok y = 성공

 

 

2. find /usr/lib64 -name "libtcmalloc*"

 tc malloc 이 (/usr/lib64) 에 잘 존재하는지 확인한다. 

 

/usr/lib64 에 tc malloc 존재 확인

 

3. systemd로 maraidb 를 관리하고있기떄문에  systemd 경로로 접근하여 mariadb 시스템 서비스 파일을 수정하였다. 

[Service]
# for gperftools - tcmalloc
Environment="LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so.4"

 

 

 

 

4.  service 설정파일을 수정해주었으니 

기동중인 mariadb service 를 멈추고 설정을 재 로딩 해주고 mariadb service 를 재시작해준다.

 4-1  : systemctl stop mariadb.servcie

 4-2 :  systemctl daemon-reload

 4-3 : systemctl start mariadb.service

 

 

5. mariadb application 에서 

SHOW GLOBAL VARIABLES LIKE 'version_malloc_library'

 를 실행하여 TC malloc 라이브러리가 잘 적용 되었는지 확인한다. 

 

라이브러리 적용 성공

 

 

6. 추후 며칠간 ram 을 모니터링 하며 누수 문제가 재발 하는지 확인 

 메모리 반환이 되지 않는 이슈가 해결된것을 확인

TC malloc library 를 적용하고 메모리 반환이 정상적으로 되는걸 확인

'DB > mysql | mariadb' 카테고리의 다른 글

my.cnf 설정파일  (2) 2024.10.30