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


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 eclipse où la limite actuelle de 1024 n'est pas suffisante.

Selon les articles que j’ai trouvés jusqu’à présent, je devrais être en mesure de

/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 1024, indépendamment de ce que contient /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: fichiers ouverts: impossible de 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 le changer à la hausse - même pour revenir à un nombre inférieur à la limite initiale:

$ 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 changer cette limite à ce que je veux, en haut ou en bas. Il ne semble même pas se soucier de la limite supposée 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 j'éclipse pour s'exécuter en tant que root, mon application plante toujours à cause de l'exception "Too Many Open File"!

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

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


121
2017-07-11 02:06


origine


Notez également qu'après avoir modifié /etc/security/limits.conf, vous devrez peut-être vous déconnecter puis revenir avant de pouvoir utiliser la nouvelle limite maximale. Je l'ai fait et j'ai été déconcerté par ulimit -Hs montrant encore 1000 quand je venais de le monter à 1000000! Ensuite, je me suis déconnecté et je me suis remis, et ulimit a montré le nouveau montant. - Cerin
Pour la session GUI, vous pouvez également trouver important (Ubuntu 16+) ce fil. - Waldemar Wosiński


Réponses:


le ulimit commande par défaut modifie les limites HARD, que vous (un utilisateur) pouvez réduire, mais ne peut pas augmenter.

Utilisez le -S option pour changer le DOUX limite, qui peut aller de 0 à {DIFFICILE}.

J'ai en fait un alias ulimit à ulimit -S, par défaut, les limites souples sont constamment appliquées.

alias ulimit='ulimit -S'

En ce qui concerne votre problème, vous manquez une colonne dans vos entrées dans /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 doit être appliquée. '*' est un caractère générique, ce qui signifie tous les utilisateurs. Relever les limites pour racine, vous devez entrer explicitement «root» au lieu de «*».

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

session required pam_limits.so

120
2017-07-11 02:16



Comment modifier la limite matérielle du nombre maximal de descripteurs de fichiers ouverts? Mon problème est que je dois autoriser mon application Eclipse à avoir autant de fichiers ouverts qu’elle le souhaite, mais la limite de 4096 ne suffit pas et je veux la définir à 500000. Mon paramètre dans limits.conf est comme vous l'avez mentionné avec l'étoile et toujours la limite dure ne bouge pas. - iCode
avez-vous déconnecté / redémarré cette fois? ulimit -a va vous montrer toutes les limites, de sorte que vous pouvez comparer pour voir si elles ont changé. - lornix
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 est comprise entre 188 000 (autorisée) et 500 000 (non autorisée). Ne sachez pas que vous avez besoin de plus de 65 000 fichiers ouverts simultanément. Sensationnel. Habituellement, c'est manipulé sur gros fer. Je me méfierais d'une programmation, euh, idée fausse. (Avec tout le respect que je vous dois, s'il vous plaît) - lornix
c'était ça: session requise pam_limits.so, merci! - lethalman
Au début j'ai raté le joker à la fin de /etc/pam.d/common-session* et juste édité common-session, et même après un redémarrage, cela n'a pas fonctionné. Mais après avoir ajouté la même ligne (pour pam_limits.so) à common-session-noninteractive, ulimit -n affiche la nouvelle valeur après une nouvelle connexion (pas de redémarrage requis). FWIW J'essayais de changer la limite pour root (seulement). - Lambart


Si vous utilisez des limites souples et strictes pour chaque 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.


15
2017-09-12 10:34





J'ai beaucoup de mal à faire fonctionner cela.

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

sudo sysctl -w fs.inotify.max_user_watches=100000

4
2017-07-10 15:41



J'ai essayé ceci parce que j'ai le même problème mais ça n'a pas fonctionné $ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024 - grepmaster