DevOps

Redis 설치 유의사항 - redis-server --check-system 점검

IT오이시이 2025. 7. 21. 11:16
728x90

Redis 설치 - 유의사항 - redis-server --check-system 점검

 

(참고) Redis 서버 설정 점검

redis-server --help

[root@vbox redis-conf]# redis-server --help
Usage: ./redis-server [/path/to/redis.conf] [options] [-]
       ./redis-server - (read config from stdin)
       ./redis-server -v or --version
       ./redis-server -h or --help
       ./redis-server --test-memory <megabytes>
       ./redis-server --check-system

Examples:
       ./redis-server (run the server with default conf)
       echo 'maxmemory 128mb' | ./redis-server -
       ./redis-server /etc/redis/6379.conf
       ./redis-server --port 7777
       ./redis-server --port 7777 --replicaof 127.0.0.1 8888
       ./redis-server /etc/myredis.conf --loglevel verbose -
       ./redis-server /etc/myredis.conf --loglevel verbose

Sentinel mode:
       ./redis-server /etc/sentinel.conf --sentinel

 

 

redis-server --check-system

redis-server --check-system
[slow-clocksource]...OK
[xen-clocksource]...OK
[overcommit]...OK
[THP]...WARNING:
You have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').

 

 

Redis 설치 유의사항

 

Redis의 redis-server --check-system 명령에서 출력된

[THP]...WARNING:
You have Transparent Huge Pages (THP) support enabled in your kernel.
...
To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled'
...

이 메시지는 리눅스 커널의 Transparent Huge Pages(THP) 기능이 활성화되어 있고, 이는 Redis의 지연(latency), 메모리 사용량에 부정적인 영향을 줄 수 있음을 경고하는 것입니다[3][7][6].

 

 

 


1. THP(Transparent Huge Pages)란?

  •  리눅스 커널이 메모리 페이지를 동적으로 크게 묶어 관리해 TLB(Translation Lookaside Buffer) 효율을 높이고, 페이지 폴트와 관리 비용을 줄이기 위해 도입된 기능입니다
  • 리눅스 커널의 메모리 관리 기능으로, 작은 페이지들을 큰 페이지(hugepage)로 묶어 효율적으로 관리합니다[4][8].
  • 데이터베이스(Redis, MongoDB 등)에서는 성능 저하와 지연 원인이 될 수 있으므로 비활성화(Disable)가 권고됩니다[3][7].

 

2. THP 주요 부작용 및 단점

A. 메모리 할당 지연(Delay)와 예측 불가한 성능 저하

  • THP가 페이지를 동적으로 할당하고 조각 모음(defragmentation)하는 과정에서
    메모리 할당 시 레이턴시(지연)가 증가할 수 있습니다12.
  • 실시간 대응이 중요한 DB, Redis, MongoDB, Oracle 등은
    이 때문에 성능 저하, 레이턴시 스파이크, 일관성 없는 처리량이 발생할 수 있습니다138.

B. 시스템 예기치 않은 재부팅 및 결함 유발

  • 전통 HugePages(static HugePages)와 혼합 사용 시 충돌 및
    심각한 문제(커널 패닉, 시스템 다운)로 이어질 수 있어,
    Oracle, MongoDB 등 국내·외 DB벤더와 Linux 배포사(레드햇 등) 모두 사용 비권고3168.

C. 예측불가한 메모리 소모

  • THP의 동적 할당과 프래그먼트 해소 정책이
    메모리 쓰레싱(불필요하게 많은 메모리 사용)이나
    일시적인 대기상태를 끌어와, 대규모 서비스에서
    장애 조건을 유발할 수 있음258.

 

3. 해결 방법

1. 일시적(즉시 적용)

시스템 재부팅 전까지 적용됩니다.

sudo bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
sudo bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
  • never: 항상 hugepage 적용하지 않음(권장)[3][4][7][6]

 

 

2. 영구적(부팅 시 자동 적용)

A) systemd 서비스로 등록 (최신 Ubuntu 등)

 

1. systemd 서비스 파일 생성:

sudo vi /etc/systemd/system/disable-thp.service

아래 내용 작성:

[Unit]
Description=Disable Transparent Huge Pages (THP)
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled; echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
WantedBy=multi-user.target

 

2. 서비스 등록 및 활성화:

sudo systemctl daemon-reload
sudo systemctl enable disable-thp.service
sudo systemctl start disable-thp.service
  • 이 방법은 Ubuntu, CentOS, 최신 배포판에서 권장되는 방식입니다[2].

B) rc.local에 추가 (구버전 리눅스)

sudo vi /etc/rc.local

아래 두 줄 추가:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • rc.local이 없는 경우 systemd 방식을 쓰세요[2][5].

 

C) GRUB 커널 파라미터 (Red Hat, CentOS)

  • /etc/default/grub 또는 /boot/grub/grub.cfg에서 커널 옵션 끝에 아래 추가:
    transparent_hugepage=never
  • 변경 후 grub 업데이트, 재부팅 필요[5][10].

* THP 상태 확인

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
  • never [always] → 별도의 조치 필요
  • [never] always → 정상적으로 비활성화

 

D) THP 설정은 sysctl.conf 또는 sysctl 명령으로 제어 불가

Transparent Huge Pages(THP) 설정을 /etc/sysctl.conf 또는 sysctl 명령으로 제어할 수 없는 이유는,
sysctl /proc/sys 디렉토리의 커널 파라미터만을 조정​하도록 설계되어 있고,
THP 관련 설정 파일(/sys/kernel/mm/transparent_hugepage/enabled, /defrag)은
/sys 파일 시스템(sysfs) 하위에 존재하기 때문입니다.

  • **sysctl의 매뉴얼(man page)**에서도,
    sysctl과 /etc/sysctl.conf로 값을 조정할 수 있는 대상은
    오직 /proc/sys 하위라고 명시되어 있습니다1.

따라서,

  • /etc/sysctl.conf에 transparent_hugepage=never와 같이 입력해도 커널이 이를 읽거나 반영하지 않습니다1.
  • sysctl로 값을 바꾸려 해도 "cannot stat /proc/sys/transparent_hugepage"와 같은 에러가 발생합니다.
  • THP 설정은 반드시 직접 /sys/kernel/mm/transparent_hugepage/* 경로에 echo never 방식 등으로 제어해야 하며, 부팅 시 적용하려면 systemd 서비스, rc.local, 또는 커널 부트 파라미터를 이용해야 합니다12.

참고:

  • vm.nr_hugepages처럼 /proc/sys/vm 하위에 존재하는 "Explicit HugePages" 설정은 sysctl로 제어가 가능합니다236.
  • 하지만 "Transparent HugePages"는 동작 메커니즘과 구현 경로가 다르고, sysctl에서 제어할 수 있도록 구현되어 있지 않습니다.

 

참고 및 결론

  • Redis에서는 THP를 반드시 never로 설정할 것을 강하게 권장합니다[3][7][6].
  • systemd 서비스 방식이 최신 리눅스에서 가장 안전하고 표준적인 방식입니다[2].

적용 후에는 Redis를 재시작해야 새 설정이 적용됩니다.

[1] https://stackoverflow.com/questions/42591511/when-to-turn-off-transparent-huge-pages-for-redis
[2] https://anotherboringtechblog.com/2024/02/disabling-thp-ubuntu-22-04/
[3] https://redis.io/docs/latest/operate/oss_and_stack/management/optimization/latency/
[4] https://chistadata.com/disabling-transparent-huge-pages-thp-linux-clickhouse-performance/
[5] https://unix.stackexchange.com/questions/99154/disable-transparent-hugepages
[6] https://ossian.tistory.com/38
[7] https://severalnines.com/blog/performance-tuning-redis/
[8] https://tmdahr1245.tistory.com/144
[9] https://hoing.io/archives/809
[10] https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/disabling-transparent-hugepages_configuring-huge-pages

728x90
반응형