MariaDB 메모리 누수 잡기 ( Memory Leak Issue ) - jemalloc
MariaDB 10.4 버전대에서 메모리 관련하여 문제가 있다 한다. 쿼리가 많으면 메모리를 엄청 잡아 먹는데 그 후로 갱신이 되지 않는다. 원인을 찾아 보니 malloc 함수 문제라는 이야기가 있어 그걸 아래 절차대로 교체를 해 보았다.
1. 보유 중인 malloc 확인
mysql> SHOW VARIABLES LIKE 'version_malloc_library'; MariaDB [(none)]> SHOW VARIABLES LIKE 'version_malloc_library'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | version_malloc_library | system | +------------------------+--------+ 1 row in set (0.001 sec) |
version_mallloc_library 를 확인해 보면 system 이라고 나온다.
2. 여러 제안이 있었지만 jemalloc을 쓰기로 했다. 아래 명령어로 설치를 한다.
yum install jemalloc |
3. library 를 설치했으면 설정 파일에 넣는다.
파일 수정 /etc/systemd/system/mariadb.service.d/*.conf ( mariadb.service.d/에 conf 파일이 하나 있다.)
아래 항목을 추가한다.
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.1" |
시스템마다 저 libjemalloc.so.1 위치가 다르니 위치 확인을 반드시 한 후 정확한 폴더 명을 적어줘야 한다.
4. 시스템 적용
아래와 같이 입력한다.
systemctl stop mariadb.service && systemctl daemon-reload && systemctl start mariadb.service |
경우에 따라서는 daemon이 안 뜨는 경우도 있는데, 그런 때는 systemctl status mariadb.service 명령어를 입력하여 오류 코드를 확인해야 한다.
5. 확인 : 아래와 같이 결과가 나오면 성공이다.
# pmap `pidof mysqld` | grep jemalloc 00007f7f114a8000 196K r-x-- libjemalloc.so.1 00007f7f114d9000 2044K ----- libjemalloc.so.1 00007f7f116d8000 8K r---- libjemalloc.so.1 00007f7f116da000 4K rw--- libjemalloc.so.1 |