본문 바로가기

IT 관련

Too many open files

특정 프로그램을 구동 시킬려고 했더니 Too many open files라는 에러가 나오면서 구동이 되지 않았다.


ulimt -a로 확인 해보니 open files수가 1024로 되어 있는 것을 확인 할 수 있었다.


ulimt -n을 이용하여 open files 수를 4096으로 올려주니 정상적으로 프로그램이 구동이 되었다.

문제는 그 다음부터 나왔다. ulimit -n으로 변경 된 open files 수는 재부팅을 하거나 새로 로그인을 하게 되면 open files수가 1024로 되돌아 와 구동중인 데몬이 죽는 경우가 발생했다.


이것은 /etc/security/limits.conf라는 파일을 수정하여 해결 하였다.


위와 같이 수정을 하니 재부팅을 하거나 로그인을 새로 해도 open files 수는 4096이 되었다.

다른 자료들을 찾아보니 /etc/security/limits.conf 수정하는 방법은 다음과 같았다.
1. 특정 계정 Open files 수 변경 시(test 계정만 4096으로 변경 시)
    test  soft  nofile 4096
    test  hard nofile 4096
2. 내것의 경우는 soft만 4096으로 변경해 주었는데 다른 OS의 경우 아래와 같이 권장 하는 경우
   가 많았다. 
   *   soft    nofile 4096
   *   hard   nofile 4096

그런데 /etc/security/limts.conf 수정은 성공적이었는데, 여기서 또 다른 문제가 나를 골치 아프게 했다. 다른 계정으로 로그인 한 후 root로 스위치 유저를 하면 문제가 없었는데 root로 바로 로그인을 하게 되면 open files수는 그대로 1024였던 것이다.

이유를 확인해 보니 limits.conf라는 파일은 PAM 모듈을 참조하는 것만 반영이 된다는 것을 확인 할 수 있었다.


/etc/pam.d 모듈을 vi로 열어 확인하니 su는 PAM 모듈을 사용하는 것을 확인 할 수 있었다. 이래서 스위치 유저 이후에는 정상적으로 반영이 되었던 거 같다.


결국 해결은 /root/.bash_profile(내경우 디폴트 프로파일로 bash를 사용)에 위와 같이 한 줄을 넣어 문제를 해결했다. 이렇게 하니 root 계정으로 로그인을 해도 open files 수는 4096으로 반영이 되었다.

참고사항 : 위의 내용들은 리눅스 기준으로 설명한 것임