아파치 충돌; "시스템에 열려 있는 파일이 너무 많습니다"

아파치 충돌; "시스템에 열려 있는 파일이 너무 많습니다"

MediaTemple(dv) 서버에서 mpm_prefork를 사용하여 Apache2를 실행하고 있습니다. 최근에 서버 구성이 크게 변경되지 않았습니다. httpd.conf는 현재 다음과 같이 설정되어 있습니다.

MaxKeepAliveRequests 200
KeepAliveTimeout 15

<IfModule prefork.c>
    StartServers           10
    MinSpareServers        10
    MaxSpareServers        10
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

하지만 완전한 Apache 충돌 직전에 다음 오류가 발생합니다.

[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)

Apache가 충돌할 때 서버를 다시 시작하기 위해 이 서버를 관리하는 것이 짜증스럽습니다. 돕다?

답변1

다음과 같은 줄을 추가해 보는 것이 좋습니다.ulimit -n 16384파일의 맨 위로 /etc/default/apache2그런 다음 다시 시작합니다.

이것도 보세요링크.

답변2

'man proc'에서:

/proc/sys/fs/파일-최대 이 파일은 모든 프로세스에 대해 열린 파일 수에 대한 시스템 전체 제한을 정의합니다. (또한 열 수 있는 파일 수에 대해 프로세스별 제한인 RLIMIT_NOFILE을 설정하기 위해 프로세스에서 사용할 수 있는 setrlimit(2)도 참조하십시오.) 파일 핸들이 부족하다는 오류 메시지가 많이 나타나면 다음을 시도해 보십시오. 이 값을 늘리면:

          echo 100000 > /proc/sys/fs/file-max

          The  kernel constant NR_OPEN imposes an upper limit on the

file-max에 배치될 수 있는 값입니다.

          If you  increase  /proc/sys/fs/file-max,  be  sure  to 

/proc/sys/fs/inode-max를 /proc/sys/fs/file-max의 새 값의 3-4배로 늘리십시오. 그렇지 않으면 inode가 부족해집니다.

   **/proc/sys/fs/file-nr**
          This (read-only)  file  gives  the  number  of  files 

현재 오픈했습니다. 여기에는 세 개의 숫자가 포함됩니다: 할당된 파일 핸들 수; 사용 가능한 파일 핸들 수; 최대 파일 핸들 수. 커널은 파일 핸들을 동적으로 할당하지만 다시 해제하지는 않습니다. 할당된 파일 수가 최대값에 가까우면 최대값을 늘리는 것을 고려해야 합니다. 사용 가능한 파일 핸들 수가 많으면 파일 핸들 사용량이 최고조에 달한 것이므로 최대값을 늘릴 필요가 없을 것입니다.

두 번째 숫자는 첫 번째 숫자가 증가해야 하는 숫자인지 확인하기 위해 살펴볼 가치가 있습니다. 그렇다면 다음을 사용하여 /etc/sysctl.conf에서 설정할 수 있습니다.

fs.file-max=512000

이는체계한계; 사용자당 제한은 이미 익숙하다고 표시한 'ulimit'로 설정되어 있습니다.

답변3

실제로 무슨 일이 일어나고 있는지 보려면 lsof를 확인하십시오. 불합리하게 높은 한도를 초과하는 것은 누출이나 기타 버그로 인해 발생하는 경우가 많습니다.

답변4

Apache를 시작하기 전에 "ulimit -n 8192"를 실행해 보십시오. 아마도 최대 열린 파일 제한에 도달했을 것입니다.

관련 정보