Linux

Linux "Too many open file" Error 해결 방법

in

Linux를 쓰다보면 갑자기 어플리케이션에서 Too many open files 에러가 발생할 때가 있습니다.

이런 오류가 생기는 이유는 프로세스가 OS에 요청할수 있는 리소스의 개수 및 양(여기서는 ‘NOFILE’이라 불리는 최대 Open 가능한 파일 개수를 뜻합니다.)에 Limit가 있고, 프로세스가 그 제한을 넘었기 때문입니다.

즉, 문제가 되는 Limit를 늘려주면 해결됩니다.

프로세스의 nonfile limit은 아래 명령어로 확인 가능하며, 기본 값은 1024 ~ 4096로 설정되어 있습니다.

// hard limit 확인
$ ulimit -Hn
// soft limit 확인
$ ulimit -Sn
// 전체적인(all) 확인
$ ulimit -a

Limit Soft? Hard?

Limit에는 Soft와 Hard 두가지가 있는데, 대략적으로 설명하면 다음과 같습니다.

Soft Limit

non-root 계정에서도 설정 가능 합니다. 실질적 제한이 아니기 때문에 이를 넘길경우 경고만 발생합니다.

Hard Limit

root 계정에서 설정 가능하며 절대로 넘을수 없는 실질적 제한 입니다. 해당 값을 넘길경우 “Too many open files” 경고가 발생하며 앱의 기능동작을 상실 합니다.

Solutions

Edit ‘/etc/security/limits.conf’ File

설정하려는 값이 System 전체의 Limit 값보다 클 경우 심각한 문제가 생길수 있습니다. limits.conf 파일을 수정하기에 앞서 아래 명령어로 System 전체의 Limit값을 확인해 줍니다.

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

/etc/security/limits.conf 파일을 수정합니다. 아래 설정은 모든 계정에 대해 Soft와 Hard 값를 500000으로 설정 합니다.

$ sudo vim /etc/security/limits.conf

* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000

적당한 Soft/Hard 값은 실행하고자 하는 어플리케이션에 따라 다를수 있으니 확인하시길 바랍니다.

재부팅 후, 세팅값 확인

아래 명령어로 open files가 500000 으로 변경되었다면 정상적으로 변경 된것입니다.

$ ulimit -a

References