반응형
[장애 사례] java.net.SocketException: Too many open files
운영 중인 Java 애플리케이션에서 다음과 같은 오류가 발생할 경우,
이는 시스템 또는 사용자별 파일 핸들 수(file descriptor) 제한을 초과했음을 의미합니다.
✅ 에러 메시지
java.net.SocketException: Too many open files
✅ 원인 정리
원인 유형 | 설명 |
---|---|
OS 레벨 제한 | Linux는 사용자당 열 수 있는 파일 수를 제한함 (ulimit -n ) |
커넥션 누수 | 열었던 소켓/스트림을 닫지 않아 누적 |
과도한 트래픽 | 짧은 시간에 수천 개 이상의 접속 발생 |
파일 I/O | 로그 파일, 업로드 처리, 캐시 등에서 열린 파일 미반환 |
✅ 진단 방법
1. 현재 파일 디스크립터 제한 확인
ulimit -n
예) 1024 → 기본 제한
2. 현재 열린 파일 수 확인
lsof -p <PID> | wc -l
→ Java 프로세스의 열린 파일 수 확인
3. 어떤 파일들이 열려 있는지 확인
lsof -p <PID>
→ 파일, 소켓, 파이프 등 리소스 확인 가능
✅ 해결 방법
✔ 1. OS 레벨 리소스 제한 상향
/etc/security/limits.conf
youruser soft nofile 65536
youruser hard nofile 65536
PAM 설정 확인
/etc/pam.d/common-session
# 또는
/etc/pam.d/login
→ 다음 항목 존재해야 함:
session required pam_limits.so
✔ 2. systemd 사용 시
# /etc/systemd/system/<your-service>.service
[Service]
LimitNOFILE=65536
→ 적용 후:
systemctl daemon-reexec
systemctl restart <your-service>
✔ 3. 애플리케이션 코드 점검
- Socket, InputStream, OutputStream, FileInputStream 등 사용 후 close() 호출 여부 반드시 확인
예:
try (Socket socket = new Socket(...)) {
// 작업 수행
} // 자동 close
✅ 실무 팁
항목 | 권장 |
---|---|
WAS (Tomcat, WildFly 등) | ulimit -n 65536 이상 권장 |
DB 서버 연동 시 | JDBC 커넥션 누수 여부 점검 |
APM 도입 | 누적 소켓/파일 수 추적 가능 |
✅ 마무리
Too many open files
오류는 시스템 안정성을 위협하는 대표적인 리소스 고갈 장애입니다.
운영체제 설정 상향 + 코드 내 리소스 반환 점검을 통해 사전 예방이 중요합니다.
반응형
'Application Servers & Java' 카테고리의 다른 글
[장애 사례] WebLogic JDBC 커넥션 풀 초기화 실패 - Access Denied for MySQL 사용자 (0) | 2025.05.15 |
---|---|
[장애 사례] WebLogic SSL 연동 오류 및 HTTPS 비정상 대응 (0) | 2025.05.15 |
[장애 사례] Infinispan CacheException - StateTransferManager wait 오류 (0) | 2025.05.15 |
[장애 사례] WebLogic STUCK THREAD 경고와 처리 방법 (0) | 2025.05.15 |
[장애 사례] SLF4J: Class path contains multiple SLF4J bindings 오류 (0) | 2025.05.15 |