Too many open files 오류는 프로세스가 열 수 있는 파일 디스크립터(fd) 수의 한계에 도달했을 때 발생합니다. 소켓·파이프·실제 파일 모두 fd를 사용합니다.
현재 한계 확인
# 현재 쉘의 soft/hard 한계
ulimit -Sn # soft limit (실제 제한)
ulimit -Hn # hard limit (올릴 수 있는 최대)
# 시스템 전체 최대값
cat /proc/sys/fs/file-max
sysctl fs.file-max# 특정 프로세스의 현재 fd 사용량
ls /proc/PID/fd | wc -l
# fd 수 많이 쓰는 프로세스 TOP 10
sudo lsof 2>/dev/null | awk '{print $2}' | sort | uniq -c | sort -rn | head -10즉시 해결 — 현재 세션 한계 올리기
# 현재 쉘에서만 적용 (재시작 시 초기화)
ulimit -n 65535
# 확인
ulimit -n영구 해결 1 — /etc/security/limits.conf
sudo nano /etc/security/limits.conf# 맨 아래에 추가
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
# 특정 사용자만 적용 시
deploy soft nofile 65535
deploy hard nofile 65535# PAM limits 모듈 활성화 확인
grep "pam_limits" /etc/pam.d/common-session
# 없으면 추가
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session로그아웃 후 재접속해야 적용됩니다.
영구 해결 2 — systemd 서비스 (권장)
systemd로 관리되는 서비스는 limits.conf가 적용되지 않습니다. 서비스 파일에 직접 설정합니다.
# 서비스 override 파일 생성
sudo systemctl edit nginx # 또는 해당 서비스명[Service]
LimitNOFILE=65535sudo systemctl daemon-reload
sudo systemctl restart nginx
# 적용 확인
sudo cat /proc/$(pgrep nginx | head -1)/limits | grep "open files"영구 해결 3 — 시스템 전체 커널 파라미터
# 즉시 적용
sudo sysctl -w fs.file-max=2097152
# 영구 적용
echo "fs.file-max = 2097152" | sudo tee -a /etc/sysctl.conf
sudo sysctl -pNginx 전용 설정
Nginx는 nginx.conf 에서도 직접 설정할 수 있습니다.
# /etc/nginx/nginx.conf
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
}sudo nginx -t && sudo systemctl reload nginx근본 원인 — fd 누수 확인
한계를 올려도 계속 오류가 난다면 fd 누수(leak) 가 있을 수 있습니다.
# 프로세스가 열고 있는 fd 목록 확인
sudo lsof -p PID | head -50
# fd 수 변화 모니터링 (10초 간격)
watch -n 10 "ls /proc/PID/fd | wc -l"fd 수가 계속 증가하면 애플리케이션 코드에서 파일·소켓을 닫지 않는 버그입니다.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.