Web Servers

[장애 사례] Apache rotatelogs 설정 오류로 인한 쓰레드 릭(Thread Leak) 현상

midworker 2025. 5. 15. 22:27
반응형

[장애 사례] Apache rotatelogs 설정 오류로 인한 쓰레드 릭(Thread Leak) 현상

이번 사례는 Apache 2.4 환경에서 잘못된 rotatelogs 설정으로 인해
쓰레드 누수(Thread Leak)서비스 중단 현상이 발생한 기술지원 사례입니다.


✅ 환경 정보

  • Apache 버전: 2.4.58
  • 현상 발생 서버: CentOS 기반 웹서버

✅ 장애 증상

1. 1초 간격으로 아래와 같은 에러 로그 지속 발생

Incorrect number of arguments
Usage: /usr/local/httpd-2.4.58/bin/rotatelogs [-vlfDtTec] [-L linkname] [-p prog] [-n number] <logfile> {<rotation time in seconds>|<rotation size>(B|K|M|G)} [offset minutes from UTC]

2. 시간이 지날수록 Apache 요청 쓰레드가 증가하여 고갈

→ 결국 서비스 불가 상태로 전환


✅ 원인 분석

  • rotatelogs 설정 오류: 로그 로테이션 기준(시간 or 용량)을 지정하지 않아
    프로세스가 정상적으로 종료되지 않고 계속 누적
  • 해당 설정은 apachectl -t 명령어로 문법 검사 시에도 "정상"으로 출력되어 사전 탐지가 어려움
  • Apache 2.4.63에서도 동일 현상 발생 → 버전 문제가 아님

✅ 설정 예시 (문제 재현 구성)

CustomLog "|/usr/local/httpd/bin/rotatelogs /path/to/access_log" common

→ 로그 파일 이름만 지정하고, 회전 주기나 용량 기준 미설정

정상 설정 예:

CustomLog "|/usr/local/httpd/bin/rotatelogs /path/to/access_log.%Y%m%d 86400" common

✅ MPM 설정 (테스트 환경)

<IfModule mpm_prefork_module>
    MaxRequestWorkers 10
</IfModule>

→ Thread 수가 적은 상태에서 rotatelogs 프로세스가 누수되며
WAS와의 연동 트래픽 증가 시 처리 불가 상태로 진입


✅ 대응 방안 및 재발 방지 대책

항목 조치 내용
에러 확인 Apache 기동 후 error_log에서 rotatelogs 관련 오류 발생 여부 확인
문법 검사 apachectl -t만으로는 rotatelogs 실행 오류 탐지가 불가능하므로 직접 호출 테스트 필요
rotatelogs 기준 명확히 지정 시간 단위(예: 86400 = 하루), 용량 단위(예: 100M) 중 택 1 지정 필수
Apache 버전 관계 없음 2.4.63에서도 동일 오류 확인됨 → 설정 오류가 본질적 원인

✅ 마무리

rotatelogs는 Apache의 로그 분할 유틸리티로 매우 유용하지만,
사용법이 정확하지 않으면 리소스 누수와 심각한 서비스 장애로 이어질 수 있습니다.

로그 회전 기준은 필수 파라미터이며,
| 파이프 방식 사용 시에는 설정 직후 직접 실행해보는 습관이 중요합니다.

반응형