본문 바로가기
서버 운영/Linux

리눅스 오픈 가능한 파일 - Too many open files

by Infralabs 2024. 4. 9.
반응형

"Too many open files" 라는 에러가 발생하였을 때의 조치 방법입니다.

리눅스는 모든 것(파일, 세션 등)을 파일로 취급합니다. 파일 디스크립터는 시스템 에서 파일이나 소켓과 같은 I/O 리소스를 참조할 때 사용되는 번호입니다.
 

1. max files (nofile)

max files(nofile)는 한 사용자가 열 수 있는 최대 파일 디스크립터 수입니다.

  • ulimit -n 명령어를 통해 현재 사용자가 열 수 있는 최대 파일 디스크립터 수를 확인할 수 있습니다.
$ ulimit -n
1024

2. file-max

file-max는 시스템 전체에서 동시에 열 수 있는 최대 파일 디스크립터 수입니다.
  • sysctl명령어나 /proc/sys/fs/file-max파일을 통해 확인할 수 있습니다.

$ cat /proc/sys/fs/file-max
1024

$ sysctl -a | grep file-max
fs.file-max = 1024

3. Too many open files 에러 해결

3-1. max files 설정

사용자가 열 수 있는 최대 파일 디스크립터 수 max files는 일시적으로 아래의 방법으로 일시적으로 조정하거나, 영구적으로 변경할 수 있습니다.

 

1) ulimit -n을 이용하여 일시적으로 조정

$ ulimit -n 4096

 

2) /etc/security/limits.conf 파일을 수정하여 영구적으로 조정

$ vi /etc/security/limits.conf 
username soft nofile 4096
username hard nofile 8192
# username 은 사용자 계정
# soft, hard는 각각 soft limit, hard limit을 의미
  • soft limit : 사용자가 자신의 제한을 초과할 수 있는 최대 값입니다. 사용자는 최대의 4096개의 파일 디스크립터를 열 수 있으나, 4096개를 초과하게 되면 경고 메시지가 발생합니다.

  • hard limit : 사용자가 열 수 있는 최대 파일 디스크립터 수입니다. 8192개를 초과하게 되면 추가적인 리소스 사용이 차단됩니다.

 
3-2. file-max 설정

1) sysctl 명령어를 통한 일시적인 조정

$ sysctl -w fs.file-max=65535
  • 시스템 전체에서 동시에 열 수 있는 최대 파일 디스크립터 수를 65535로 일시적으로 변경

2) /etc/sysctl.conf 파일을 수정하여 영구적으로 조정

$ vi /etc/sysctl.conf
...
fs.file-max = 65535

$ sysctl -p
  • 해당 파일 하단에 fs.file-max = 65535를 추가하고, sysctl -p 명령어를 통해 변경사항을 적용합니다.

 

반응형