Pourquoi ne peut-il pas dépasser 4096 fichiers ouverts maximum pour les utilisateurs non root?

13

Je n'arrive pas à augmenter la nofilelimite pour les utilisateurs non root sur Ubuntu 14.04, malgré le suivi de chaque réponse StackExchange liée à ce problème. Jusqu'à présent, j'ai:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

Redémarré, connecté et:

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

Il semble toujours y avoir une limite de 4096 max pour les utilisateurs non root.

Caféine Coma
la source
J'ai exactement le même problème sur le bureau Ubuntu 16.10. Peu importe ce que j'essaie, les limites sont 1024 ou 4096.
NathanAldenSr

Réponses:

13

En utilisant Ubuntu 14.04, j'ai obtenu la limite stricte décrite:

user@notebook:~$ ulimit -Hn 4096  

Je pourrais l'abaisser en utilisant ulimit, mais pas l'augmenter, tout comme la question le décrit. Comme le décrit le manuel d'ulimit:

seule la racine peut augmenter la limite stricte

J'ai donc essayé de fixer une limite plus élevée /etc/security/limits.confcomme ceci:

user hard nofile 9999 

et une nouvelle connexion comme ssh localhost -l userm'a donné la nouvelle limite:

user@notebook:~$ ulimit -Hn 9999

J'espère que cela fonctionne aussi pour vous.

TomTomTom
la source
Merci TomTomTom. J'ai déjà un tel changement dans /etc/security/limits.d/custom.conf. J'ai essayé de le mettre directement dans /etc/security/limits.conf comme vous l'avez suggéré, et j'obtiens toujours "bash: ulimit: fichiers ouverts: impossible de modifier limit: opération non autorisée".
Caffeine Coma
Je - devine juste - l'une des deux raisons pour lesquelles cela ne fonctionne pas pour vous:
TomTomTom
1
Cela m'a pris trop de temps pour modifier le commentaire incomplet. Nous y voilà: je - devine - l'une des deux raisons pour lesquelles cela ne fonctionne pas pour vous: 1. /etc/security/limits*n'est pas lu par votre mécanisme de connexion - pour une raison encore inconnue. 2. Votre limite fixe est fixée à 4096 ailleurs et "seule la racine peut augmenter ...". Vous pouvez vérifier vos profils comme .bashrc(en fonction de votre shell), ou vous pouvez /etcrechercher d'autres endroits, où des limites peuvent être définies, comme find /etc | grep -e ulimit -e 4096 -e nofile. BTW: avez-vous essayé ssh? Et: avez-vous changé /etc/ssh/sshd.confpour éviter PAM pour une raison quelconque?
TomTomTom
Oui, toutes les connexions se font via ssh. J'ai désactivé UsePAM - plusieurs guides le recommandent pour autoriser uniquement les connexions basées sur la clé ssh. Je vais essayer de l'allumer temporairement, juste pour voir si c'est le problème. Merci!
Caffeine Coma
Afaik, PAM est ce qu'il faut lire /etc/security/limits*- vous pouvez essayer d'activer PAM juste pour vérifier cela. J'essaierai de désactiver PAM pour voir quelle différence cela fait et je rapporterai les résultats. --- Oui! c'est ça! Avec PAM désactivé, ma limite est également de 4096, mais elle est fixée à 9999 pouces /etc/security/limits.conf.
TomTomTom
4

Cet article , je pense, répond à votre problème.

Fondamentalement, vous devez utiliser la commande ulimit pour augmenter les ressources disponibles.

Par exemple:

Utilisez la commande suivante pour afficher le nombre maximal de descripteurs de fichiers ouverts:

cat /proc/sys/fs/file-max

Pour voir les valeurs matérielles et logicielles, exécutez la commande comme suit:

# ulimit -Hn
# ulimit -Sn

Pour afficher les valeurs matérielles et logicielles pour l'utilisateur httpd ou oracle, exécutez la commande comme suit:

# su - username

Pour fixer le nombre de fichiers maximum, vous pouvez augmenter le nombre maximum de fichiers ouverts en définissant une nouvelle valeur dans la variable de noyau / proc / sys / fs / file-max comme suit (connectez-vous en tant que root):

# sysctl -w fs.file-max=100000

La commande ci-dessus force la limite à 100 000 fichiers. Vous devez modifier le /etc/sysctl.conffichier et mettre la ligne suivante afin qu'après le redémarrage, le paramètre reste tel quel. Pour ce faire, ajoutez une directive de configuration comme suit:

fs.file-max = 100000

Enregistrez et fermez le fichier. Les utilisateurs doivent se déconnecter et se reconnecter pour que les modifications prennent effet ou tapent simplement la commande suivante:

# sysctl -p

Vérifiez vos paramètres avec la commande:

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

ou:

# sysctl fs.file-max

La procédure ci-dessus définit les limites des descripteurs de fichiers (FD) à l'échelle du système, mais vous pouvez limiter httpd(ou tout autre utilisateur) l'utilisateur à des limites spécifiques en modifiant le /etc/security/limits.conffichier en modifiant /etc/security/limits.confet en définissant les limites comme suit:

httpd soft nofile 4096
httpd hard nofile 10240

Vérifiez-les ensuite en:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Si vous avez le problème sur d'autres distributions Linux, vérifiez le /etc/pam.d/loginet assurez-vous que vous l'avez pam_limits.soactivé, par exemple

session required pam_limits.so
Brooke Fogg-Wolfe
la source
2
Salut Brooke. Malheureusement, j'ai déjà essayé les suggestions de cet article. Bien que le «ulimit -Hn» était nouveau pour moi; il imprime 4096, la limite dans laquelle je continue de me cogner.
Caffeine Coma
0

S'il s'agit d'un service, vous pouvez essayer de définir la limite en /etc/systemd/system/{ServiceName}.serviceplusLimitNOFILE=65536

Maicon Santana
la source
Ubuntu 14.04 n'utilise pas systemd par défaut.
number5
Ubuntu 16.04, Tomcat 8 a fonctionné pour moi
Arjang