Backend
Linux 파일 디스크립터 제한 (ulimit) 실무 가이드
Too many open files 장애를 재현하고 해결하는 실전 점검 순서를 정리합니다.
Linux 파일 디스크립터 제한 (ulimit) 실무 가이드
핵심
파일, 소켓, 파이프는 모두 FD를 사용합니다.
트래픽이 증가하면 FD 한도 초과로 EMFILE/Too many open files가 발생합니다.
문제 해결은 두 축을 같이 봐야 합니다.
- 한도 조정
- 커넥션/핸들 누수 제거
점검 순서
- 프로세스 실제 한도 확인
cat /proc/<pid>/limits | grep "Max open files"
- 사용량 확인
ls /proc/<pid>/fd | wc -l
- 시스템 전체 한도 확인
cat /proc/sys/fs/file-max
영구 설정
systemd 서비스
[Service]
LimitNOFILE=65535
커널
# /etc/sysctl.d/99-fd.conf
fs.file-max = 2097152
적용 후 daemon-reload, 재시작, 재확인을 반드시 합니다.
자주 하는 실수
- 셸에서
ulimit만 올리고 서비스에는 미반영 - FD 한도만 올리고 keep-alive/timeout 미설정
- 누수 원인 분석 없이 숫자만 반복 상향
요약
ulimit 문제는 설정 + 코드 문제입니다.
서비스 단(LimitNOFILE) 반영 여부를 먼저 검증하고, 이후 커넥션 관리 정책을 같이 튜닝해야 재발을 막을 수 있습니다.