web-dev-qa-db-fra.com

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

Je n'arrive pas à augmenter la limite nofile 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

Là encore semble être en quelque sorte une limite de 4096 max pour les utilisateurs non root.

12
Caffeine Coma

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

user@notebook:~$ ulimit -Hn 4096  

Je pourrais l'abaisser avec ulimit, mais pas l'augmenter, comme le dit la question. Comme le décrit le manuel de ulimit:

seule la racine peut augmenter la limite dure

J'ai donc essayé de définir une limite supérieure dans /etc/security/limits.conf comme ceci:

user hard nofile 9999 

et un nouveau login comme ssh localhost -l user m'a donné la nouvelle limite:

user@notebook:~$ ulimit -Hn 9999

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

12
TomTomTom

This article , je pense que cela règle votre problème.

En principe, 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 fichier ouverts:

cat /proc/sys/fs/file-max

Pour voir les valeurs ferme et souple, lancez la commande comme suit:

# ulimit -Hn
# ulimit -Sn

Pour voir les valeurs matérielles et variables de l'utilisateur httpd ou Oracle, lancez la commande comme suit:

# su - username

Pour fixer le nombre maximal de fichiers, vous pouvez augmenter le nombre maximal de fichiers ouverts en définissant une nouvelle valeur dans la variable du noyau/proc/sys/fs/file-max comme suit (identifiez-vous à la racine):

# sysctl -w fs.file-max=100000

La commande ci-dessus force la limite à 100 000 fichiers. Vous devez éditer le fichier /etc/sysctl.conf et mettre la ligne suivante afin que, 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 il suffit de taper 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) au niveau du système. Toutefois, vous pouvez limiter l'utilisateur httpd (ou tout autre utilisateur) à des limites spécifiques en modifiant le fichier /etc/security/limits.conf en modifiant /etc/security/limits.conf, puis définissez-les comme suit:

httpd soft nofile 4096
httpd hard nofile 10240

Puis vérifiez-les en:

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

Si le problème se pose sur d'autres distributions Linux, vérifiez le /etc/pam.d/login et assurez-vous que vous avez activé pam_limits.so, par exemple.

session required pam_limits.so
4

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