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의 로그 분할 유틸리티로 매우 유용하지만,
사용법이 정확하지 않으면 리소스 누수와 심각한 서비스 장애로 이어질 수 있습니다.
로그 회전 기준은 필수 파라미터이며,|
파이프 방식 사용 시에는 설정 직후 직접 실행해보는 습관이 중요합니다.
반응형