← 문제 라이브러리
Linux 입문 15분

Too many open files: 이벤트 때 채팅 서버가 새 연결을 받지 못함

라이브 이벤트가 시작되자 웹소켓 채팅 서버가 새 연결을 받지 못하고, 이미 붙어 있던 사용자만 대화가 됩니다.

검수된 문제무료
시나리오

라이브 이벤트가 시작되자 웹소켓 채팅 서버가 새 연결을 받지 못하고, 이미 붙어 있던 사용자만 대화가 됩니다. 로그에는 too many open files가 계속 찍힙니다. 담당자가 서버에 들어가 ulimit -n 을 보니 65535로 넉넉합니다. 지난달 이 서비스를 직접 실행하던 방식에서 systemd 서비스로 바꿨습니다. 팀원들은 연결을 제대로 닫지 않는 누수라며 코드를 뒤지고 있습니다. 이벤트 시청자는 평소보다 다섯 배쯤 많고, 동시 접속은 천 명 안팎에서 더 늘지 않습니다.

단서
서비스 로그
ERROR accept4: too many open files; retrying in 1s
프로세스의 실제 한도
$ ulimit -n
65535

$ cat /proc/$(pidof chat-server)/limits | grep 'open files'
Max open files            1024                 524288               files

$ ls /proc/$(pidof chat-server)/fd | wc -l
1024

$ grep nofile /etc/security/limits.conf
*  soft  nofile  65535

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 셸의 ulimit과 서비스 프로세스의 한도는 다를 수 있다
  • systemd 서비스에 한도가 적용되는 곳
점검 체크리스트
  1. /proc/<pid>/limits 로 실행 중인 프로세스의 실제 한도
  2. /proc/<pid>/fd 개수로 사용량
  3. unit 파일의 LimitNOFILE 설정