web-dev-qa-db-fra.com

Apache Crashing; "Trop de fichiers ouverts dans le système"

Je suis en cours d'exécution Apache2 avec mpm_prefork sur un serveur Mediatemple (DV). Aucun changement significatif n'a été apporté à la configuration de ma serveur récemment. httpd.conf est actuellement défini sur les éléments suivants:

MaxKeepAliveRequests 200
KeepAliveTimeout 15

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

Mais je reçois l'erreur suivante juste avant d'un accident d'Apache à part entière:

[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)

Je suis ennuyé par la garde d'enfants de ce serveur pour le redémarrer lorsque Apache se bloque. Aider?

7
Eric Martindale

de 'Man Proc':

/ proc/sys/fs/fs/fs/fs/max Ce fichier définit une limite à l'échelle du système sur le nombre de fichiers ouverts pour tous les processus. (Voir aussi SETRLIMIT (2), qui peut être utilisé par un processus pour définir la limite de processus, RLIMIT_NOFILE, sur le nombre de fichiers qu'il peut s'ouvrir.) Si vous obtenez de nombreux messages d'erreur sur l'utilisation des poignées de fichier, essayez Augmenter cette valeur:

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

          The  kernel constant NR_OPEN imposes an upper limit on the

valeur pouvant être placée dans le fichier-max.

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

augmenter/proc/sys/fs/inode-max à 3-4 fois la nouvelle valeur de/proc/sys/fs/fichier-max, ou vous manquerez d'inodes.

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

actuellement ouvert. Il contient trois nombres: le nombre de poignées de fichier allouées; le nombre de poignées de fichier libres; et le nombre maximum de poignées de fichier. Le noyau attribue le fichier gère de manière dynamique, mais cela ne les libère pas à nouveau. Si le nombre de fichiers alloués est proche du maximum, vous devez envisager d'augmenter le maximum. Lorsque le nombre de poignées de fichier libres est grand, vous avez rencontré un pic dans votre utilisation des poignées de fichier et vous n'avez probablement pas besoin d'augmenter le maximum.

Le deuxième numéro vaut la peine de voir pour voir si le premier numéro est ce que vous devez augmenter. Si tel est le cas, vous pouvez la définir dans votre /etc/sysctl.conf avec:

fs.file-max=512000

Notez que cela définit le système limite; La limite par utilisateur est définie avec "ulimit", que vous avez déjà indiquée que vous connaissiez bien.

4
pjz

Vérifiez lsof pour voir ce qui se passe réellement. Dépasser une limite déraisonnablement élevée est souvent due à une fuite ou à un autre bogue.

2
carlito