Comment puis-je changer le nombre limite de fichiers ouverts sous Linux? [fermé]

lors de l'exécution de mon application j'obtiens parfois une erreur à propos de too many files open .

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

Modifier ulimit -n 2048 se traduit par une erreur de permission.

167
demandé sur Charles Menguy 2008-08-29 20:14:25

4 réponses

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

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

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

sur 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 sont souvent dans /etc/security/limits.conf.

il y a deux types de limites:

  • doux limites sont simplement actuellement en vigueur limites
  • dur les limites de marquer le maximum de valeur qui ne peut être dépassé par la définition d'une limite douce

Doux limites peuvent être définies par tout utilisateur alors que les limites de sont changeables seulement par Racine. Les limites sont une propriété d'un processus. Elles sont héritées lors de la création d'un processus enfant, de sorte que des limites globales doivent être définies lors de l'initialisation du système dans les scripts d'initialisation et que les limites de l'utilisateur doivent être définies lors de la connexion de l'utilisateur, par exemple en utilisant pam_limits.

il y a souvent des valeurs par défaut définies lorsque la machine démarre. Donc, même si vous pouvez réinitialiser votre ulimit dans un shell individuel, vous pouvez trouver qu'il se réinitialise à la valeur précédente lors du redémarrage. Vous pouvez grep vos scripts d'amorçage pour les commandes ulimit d'existence si vous voulez changer la valeur par défaut.

134
répondu hoyhoy 2017-06-26 06:29:14

si vous utilisez Linux et que vous avez obtenu l'erreur de permission, vous devrez augmenter la limite permise dans le fichier /etc/limits.conf ou /etc/security/limits.conf (où le fichier est situé dépend de votre distribution Linux spécifique).

par exemple pour permettre à n'importe qui sur la machine d'augmenter leur nombre de dossiers ouverts jusqu'à 10000 ajouter la ligne au dossier limits.conf .

* hard nofile 10000

puis Déconnexion et relogin à votre système et vous devriez pouvoir faire:

ulimit -n 10000

sans erreur de permission.

88
répondu Jonathan Stanton 2016-12-14 15:53:51

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

webuser hard nofile 64000

puis se connecter en tant que webuser

su - webuser

2) éditer les deux fichiers suivants pour webuser

ajouter .bashrc et .bash_profile fichier en cours d'exécution

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

3) déconnecter, puis se connecter de nouveau et vérifier que les changements ont été faits correctement:

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

c'est ça et boum, boom boom.

33
répondu Vikrant Telkar 2014-02-11 17:08:41

si certains de vos services sont bloqués dans ulimits, il est parfois plus facile de mettre des commandes appropriées dans le script d'initialisation de service. Par exemple, quand Apache déclare

[alerte] (11 Ressource temporairement non disponible: apr_thread_create: impossible de créer le thread de travail

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

5
répondu Sysadmin 2012-10-27 22:37:10