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

120

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 une application Java ecplise où la limite actuelle de 1024 ne suffit pas.

D'après les articles que j'ai trouvés jusqu'à présent, je devrais pouvoir mettre des lignes dans

/etc/security/limits.conf comme ceci;

soft nofile 4096
hard nofile 4096

pour 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 la changer vers le haut - 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 en tant qu'utilisateur root, mon application plante toujours en raison 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 le faire correctement? J'ai regardé plusieurs autres articles et mais pas de chance!

    
posée iCode 11.07.2012 - 04:06
la source

3 réponses

119

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

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

J'ai en fait un alias de ulimit à ulimit -S , donc par défaut, les limites logicielles sont constamment définies.

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 à laquelle la limite doit être appliquée. '*' est un caractère générique, ce qui signifie tous les utilisateurs. Pour augmenter les limites de root , vous devez entrer explicitement "root" au lieu de "*".

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

session required pam_limits.so
    
réponse donnée lornix 11.07.2012 - 04:16
la source
15

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.

    
réponse donnée Jeroen Teeuwen 12.09.2013 - 12:34
la source
4

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
    
réponse donnée Layke 10.07.2015 - 17:41
la source

Lire d'autres questions sur les étiquettes