Comment augmenter la limite de fichiers ouverts pour un utilisateur non root?

144

Cela se produit sur la version Ubuntu 12.04 (précise) du noyau 64 bits Linux 3.2.0-25-virtual

J'essaie d'augmenter le nombre de fichiers ouverts autorisés pour un utilisateur. Ceci est pour mon application java éclipse où la limite actuelle de 1024 n'est pas suffisante.

Selon les publications que j’ai trouvées jusqu’à présent, je devrais pouvoir insérer des lignes dans

/etc/security/limits.conf comme ceci:

soft nofile 4096
hard nofile 4096

augmenter le nombre de fichiers ouverts autorisés pour tous les utilisateurs.

Mais cela ne fonctionne pas pour moi et je pense que le problème n'est pas lié à ce fichier.

Pour tous les utilisateurs, la limite par défaut est de 1024, quel que soit le contenu de /etc/security/limits.conf (j'ai redémarré après avoir modifié ce fichier).

$ ulimit -n
1024

Maintenant, malgré les entrées dans /etc/security/limits.conf, je ne peux pas augmenter cela:

$ ulimit -n 2048

-bash: ulimit: les fichiers ouverts: ne peut pas modifier la limite: Opération non autorisée La partie étrange est que je peux changer la limite vers le bas , mais ne peut pas changer vers le haut - même de revenir à un chiffre qui est inférieur à la limite d' origine:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

-bash: ulimit: open files: cannot modify limit: Operation not permitted

En tant que root, je peux modifier cette limite en tout ou en partie. Il ne semble même pas se soucier de la soi-disant limite à l'échelle du système dans / proc / sys / fs / file-max

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

Mais même si je dois exécuter eclipse en tant que root, mon application se bloque toujours à cause de l'exception "Too Many Open File"!

Jusqu'à présent, je n'ai trouvé aucun moyen d'augmenter la limite de fichiers ouverts pour un utilisateur non root.

Comment dois-je faire correctement cela? J'ai regardé plusieurs autres posts mais pas de chance!

iCode
la source
6
Notez également qu’après la modification /etc/security/limits.conf, vous devrez peut-être vous déconnecter puis vous reconnecter avant de pouvoir utiliser la nouvelle limite maximale. Je l'ai fait, et j'ai été déconcerté de ulimit -Hstoujours afficher 1000 alors que je venais de l'élever à 1000000! Ensuite, je me suis déconnecté puis rentré, et ulimit a montré le nouveau montant.
Cerin
Pour la session graphique, vous pouvez également trouver important (Ubuntu 16+) ce fil .
Waldemar Wosiński

Réponses:

142

La ulimitcommande par défaut modifie les limites strictes, que vous (un utilisateur) peut réduire, mais ne peut pas augmenter.

Utilisez l' option -S pour modifier la limite SOFT , qui peut aller de 0 à { HARD }.

J'ai en fait aliasé ulimitsur ulimit -S, donc il utilise par défaut les limites souples tout le temps.

alias ulimit='ulimit -S'

En ce qui concerne votre problème, il vous manque une colonne dans vos entrées /etc/security/limits.conf.

Il devrait y avoir QUATRE colonnes, mais la première est manquante dans votre exemple.

* soft nofile 4096
* hard nofile 4096

La première colonne décrit l’OMS pour laquelle la limite est applicable. '*' est un caractère générique, ce qui signifie tous les utilisateurs. Pour augmenter les limites de la racine , vous devez entrer explicitement «racine» au lieu de «*».

Vous devez également éditer /etc/pam.d/common-session*et ajouter la ligne suivante à la fin:

session required pam_limits.so
Lornix
la source
1
Comment modifier la limite stricte pour le nombre maximal de descripteurs de fichier ouverts? Mon problème est que je dois autoriser mon application Eclipse à avoir autant de fichiers ouverts qu’elle veut, mais la limite de 4096 n’est pas suffisante et je souhaite la fixer au maximum, peut-être 500000. Ma configuration dans le fichier limits.conf est comme vous l'avez mentionné avec l'étoile et toujours la limite dure ne bouge pas.
iCode
1
Eh bien, vous avez découvert que la valeur de / proc / sys / fs / file-max était de 188 897 ... Je dirais donc que votre limite supérieure se situe entre 188 000 (autorisé) et 500 000 (non autorisé). Vous savez que vous avez besoin de plus de 65 000 fichiers ouverts simultanément. Sensationnel. Habituellement, c'est traité avec du gros fer. Je me méfierais d'une programmation, euh, d'une idée fausse. (Avec tout le respect que
je
4
c'était ça: session requise pam_limits.so, merci!
Lethalman
13
Au début, j'ai raté le caractère générique à la fin de /etc/pam.d/common-session*et juste édité common-session, et même après un redémarrage, cela ne fonctionnait pas. Mais après avoir ajouté la même ligne (pour pam_limits.so) à common-session-noninteractive, ulimit -nla nouvelle valeur s’affiche après une nouvelle connexion (aucun redémarrage requis). FWIW J'essayais de changer la limite pour root (seulement).
Lambart
1
vérifiez également si la valeur est différente si vous êtes connecté en tant que root. superuser.com/questions/1200539/…
Robbo_UK
20

Si vous utilisez des limites souples et strictes par utilisateur, vous pouvez utiliser quelque chose comme:

su USER --shell /bin/bash --command "ulimit -n"

pour vérifier si vos paramètres fonctionnent pour cet utilisateur spécifique ou non.

Jeroen Teeuwen
la source
5

J'ai beaucoup de mal à obtenir que cela fonctionne.

L'utilisation de ce qui suit vous permet de le mettre à jour indépendamment de votre autorisation utilisateur.

sudo sysctl -w fs.inotify.max_user_watches=100000
Layke
la source
4
J'ai essayé cela car j'ai le même problème mais cela n'a pas fonctionné$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster