217 votes

Comment modifier la limite du nombre de fichiers ouverts sous Linux ?

Lorsque j'exécute mon application, je reçois parfois une erreur du type too many files open .

Running ulimit -a indique que la limite est de 1024. Comment puis-je augmenter la limite au-delà de 1024 ?

Modifier ulimit -n 2048 entraîne une erreur d'autorisation.

168voto

hoyhoy Points 3806

Vous pouvez toujours essayer de faire un ulimit -n 2048 . Cela ne réinitialisera la limite que pour votre shell actuel et le nombre que vous spécifiez ne doit pas dépasser la limite stricte.

Chaque système d'exploitation a une limite dure différente configurée dans un fichier de configuration. Par exemple, la limite dure des fichiers ouverts sur Solaris peut être définie au démarrage à partir de /etc/system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

Sous OS X, ces mêmes données doivent être définies dans /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Sous Linux, ces paramètres se trouvent souvent dans /etc/security/limits.conf.

Il existe deux types de limites :

  • doux les limites sont simplement les limites actuellement appliquées
  • dur limites marquent la valeur maximale qui ne peut pas être dépassée en fixant une limite souple.

Les limites souples peuvent être fixées par n'importe quel utilisateur, tandis que les limites strictes ne peuvent être modifiées que par Root. Les limites sont une propriété d'un processus. Elles sont héritées lors de la création d'un processus enfant donc les limites à l'échelle du système doivent être définies lors de l'initialisation du système dans init scripts et les limites de l'utilisateur doivent être définies lors de la connexion de l'utilisateur par exemple en utilisant pam_limits.

Des valeurs par défaut sont souvent définies au démarrage de la machine. Ainsi, même si vous pouvez réinitialiser votre ulimit dans un shell individuel, vous pouvez constater qu'il se réinitialise à la valeur précédente lors du redémarrage. Vous pouvez rechercher les commandes ulimit existantes dans vos scripts de démarrage si vous voulez changer la valeur par défaut.

113voto

Jonathan Stanton Points 501

Si vous utilisez Linux et que vous avez obtenu l'erreur de permission, vous devrez augmenter la limite autorisée dans le fichier /etc/limits.conf o /etc/security/limits.conf (l'emplacement de ce fichier dépend de votre distribution Linux spécifique).

Par exemple, pour permettre à n'importe qui sur la machine d'augmenter le nombre de fichiers ouverts jusqu'à 10000, ajoutez la ligne suivante au fichier limits.conf fichier.

* hard nofile 10000

Ensuite, déconnectez-vous et reconnectez-vous à votre système et vous devriez être en mesure de le faire :

ulimit -n 10000

sans erreur de permission.

41voto

Vikrant Telkar Points 169

1) Ajoutez la ligne suivante à /etc/security/limits.conf

webuser hard nofile 64000

puis connectez-vous en tant qu'utilisateur web

su - webuser

2) Editez les deux fichiers suivants pour le webuser

ajouter .bashrc et .bash_profile en exécutant

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Déconnectez-vous, puis reconnectez-vous et vérifiez que les modifications ont été effectuées correctement :

$ ulimit -a | grep open
open files                      (-n) 64000

C'est tout et ils font boom, boom boom.

8voto

Sysadmin Points 29

Si certains de vos services se rebiffent dans les ulimits, il est parfois plus facile de mettre les commandes appropriées dans l'init-script du service. Par exemple, lorsqu'Apache signale

[alerte] (11)Ressource temporairement indisponible : apr_thread_create : impossible de créer un thread de travailleur

Essayez de mettre ulimit -s unlimited sur /etc/init.d/httpd . Cela ne nécessite pas de redémarrage du serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X