1. 개요
- ZFS 파일시스템의 캐시(ARC)에서 발생하는 스래싱 현상에 대한 정의, 진단, 대응 및 예방 방안 정리
2. ZFS ARC 스래싱 정의
-
개념: 캐시 히트(Hit) 연속 실패로 인해 잦은 캐시 아이템 교체(Eviction)가 발생, 시스템 성능이 오히려 저하되는 현상
-
영향: 고성능 I/O 환경(예: 데이터베이스 서버)에서 심각한 서비스 장애 유발 가능
3. 주요 진단 증상
- CPU
iowait
수치 20% 이상 지속
- CPU
system mode
사용률 평소 대비 증가
- 캐시 히트율(Hit rate) 저하 (평상시 데이터와 비교 필요)
-
핵심 증상:
arc_prune
, arc_evict
커널 스레드의 CPU 점유율 90% 이상 시 스래싱 확실
4. 긴급 대응 방안
-
조치: 리눅스 파일시스템 캐시 수동 제거
-
명령어:
echo 3 > /proc/sys/vm/drop_caches
-
효과: 페이지 캐시 및 slab 객체를 함께 제거
-
특징:
- 디스크에 미반영된 데이터(dirty item)는 유지되므로 데이터 손실 없음 (비파괴적)
- 실행 직후 캐시가 다시 채워지기 전까지 일시적 성능 저하 발생
5. 근본적인 예방
-
원인: 시스템 워크로드에 비해 할당된 ARC 캐시 크기가 부족하기 때문
-
ARC 크기 (
zfs_arc_max
):
- 기본값이 이미 시스템 메모리의 1/2(Linux 기준)로 매우 큼
- 다른 애플리케이션과 메모리 경쟁을 유발할 수 있어 무작정 늘리기 어려움
-
해결 방안:
- 다른 애플리케이션의 메모리 사용량이 높은 경우,
zfs_arc_max
값을 줄여 경쟁 방지
- 근본적인 문제 해결을 위해서는 물리적 메모리 증설(Scale-up)이 가장 확실한 방법