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)이 가장 확실한 방법