
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. 예측불가한 메모리 소모
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
'DevOps' 카테고리의 다른 글
| 테스트의 종류 - 단위.통합테스트 CBT UAT 시스템테스트 (0) | 2025.10.10 |
|---|---|
| 클로드코드(Claude Code) 설치 및 사용 완벽 가이드 (1) | 2025.08.08 |
| Redis 설치 유의사항 - Slow clocksource - redis-server --check-system (0) | 2025.07.21 |
| Redis에서 TLS를 활성화 (0) | 2025.07.21 |
| Redis Benchmark (0) | 2025.07.21 |
| Redis Open Source - Install using RPM and systemd (1) | 2025.07.21 |
| Redis | Hazelcast 기능 및 성능 비교 (0) | 2025.07.19 |