메일송신이 안된다

/var/log/maillog 에 postfix/smtp[31121]: fatal: epoll_create: Too many open files in system 라고 나온다..

일단, OS가 허용한 최대 파일수를 알아본다.

# ulimit -n
1024

현재 root 유져인데 root유져로 실행되는 경우 1024 개까지 열 수있다.
다음으로 31121프로세스가 너무 많은 파일을 열어서 그런것 같은데,

lsof -n|grep -oE ‘^[a-z]+’|sort|uniq -c|sort -n

위와 같이 각각의 프로세스들이 열어놓은 파일 수를 출력해본다..

그 결과는 아래와 같다.

566 sshd
621 java
1585 httpd

httpd 가 1585 개의 파일을 사용하고 있다.
httpd는 apache유져로 실행되기 때문에 apache유져에게 1585개 이상의 파일을 열 수 있도록 해야한다.

/etc/security/limits.conf 파일을 열어서 아래 내용을 추가한다.

apache soft nofile 4096
apache hard nofile 4096

넉넉하게 4096개까지 열 수 있도록 허용했다.
다음으로 httpd 를 재시작했더니, 메일송신이 가능하게 됐다.


ulimit -n 4096 처럼 변경하는건 이 커맨드를 실행하는 유져에 적용이된다.

# sysctl -w fs.file-max=4096

위와 같이 동적으로 적용할 수도 있고 /etc/sysctl.conf 를 편집하여 영구적으로 적용할 수도 있다.

참고사이트 : http://www.ginnokagi.com/2009/06/linux_3.html

This entry was posted in Apache, Mail. Bookmark the permalink.