Impossible d'augmenter la limite de fichiers ouverts au-delà de 4096 (Ubuntu)

34

Je suis sur Ubuntu 17.04. Essayer d'augmenter la limite de fichiers ouverts et aucune des instructions que j'ai trouvées en ligne ne fonctionne. Je peux aller jusqu'à 4096, mais je ne peux pas dépasser ça.

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

Ça marche. Cela ne veut pas:

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

Cela semble être dû à la limite stricte:

$ ulimit -Hn
4096

J'ai essayé d'ajouter ces lignes à /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

Également ajouté cette ligne à /etc/pam.d/common-session et /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

Depuis, j'ai redémarré mon ordinateur. Les modifications apportées à limits.conf ne semblent rien affecter. La limite stricte est toujours bloquée à 4096, ce qui m'empêche d'aller plus haut. Comment puis-je augmenter ma limite de fichiers ouverts?


Voici quelques informations de configuration supplémentaires:

$ cat /proc/sys/fs/file-max 
1624668
mkasberg
la source

Réponses:

56

OK, j'ai finalement compris cela. Les limites que je définissais dans /etc/security/limits.conf étaient appliquées, mais elles n'étaient pas appliquées à la connexion graphique. Cela peut être vérifié comme ceci à partir d'une fenêtre de terminal:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Plus de recherches m'ont conduit à ce rapport de bug , qui m'a fait pointer dans la bonne direction. Afin de modifier la limite utilisée par le shell de connexion, nous devons ajouter la ligne suivante à /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Ce changement fonctionne, mais n'affecte que la limite souple. (Nous laissant plafonné avec une limite fixe de 4096 toujours.) Afin d'affecter également la limite stricte, nous devons modifier /etc/systemd/system.conf avec le même changement.

Les modifications que j'ai apportées dans /etc/pam.d n'étaient pas nécessaires. Au moins sur Ubuntu, cela fonctionne déjà. De plus, il n'était pas nécessaire de modifier les paramètres de rootet *dans limits.conf. Changer les limites pour mkasbergétait suffisant, au moins pour mon cas d'utilisation.


En résumé

Si vous souhaitez augmenter la limite indiquée par ulimit -n, vous devez:

  • Modifiez /etc/systemd/user.conf et /etc/systemd/system.conf avec la ligne suivante (cela prend en charge la connexion graphique):

    DefaultLimitNOFILE=65535
    
  • Modifiez /etc/security/limits.conf avec les lignes suivantes (cela prend en charge la connexion non GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Redémarrez votre ordinateur pour que les modifications prennent effet.

mkasberg
la source
2
DefaultLimitNOFILE=65535a fait l'affaire. Mais pourquoi /etc/security/limits.conf ça ne marche pas?
Suvitruf dit Réintégrer Monica le
6
La connexion GUI utilise systemd, qui a apparemment sa propre configuration ( /etc/systemd/system.conf) qui est indépendante de la configuration normale des sessions de terminal ( /etc/security/limits.conf). Je ne connais pas suffisamment systemd pour savoir pourquoi il a été implémenté de cette façon.
mkasberg
1
@Suvitruf car il est ignoré dans un système systemd . Je poste une réponse.
Marc.2377
1
Je veux juste souligner que les limites pour l' rootutilisateur ne peuvent pas être spécifiées par *ou par des spécificateurs de groupe. rootle littéral doit être spécifié explicitement.
Petr Javorik
2
Cela fonctionne pour moi, après un redémarrage .
Shihe Zhang
14

Pas besoin de changer quoi que ce soit dans le /etc/security/limits.conffichier, il est ignoré si vous utilisez systemd.

(reproduire une réponse modifiée à une autre question sur le réseau ...)

Une alternative pour ceux qui préfèrent ne pas modifier les fichiers par défaut /etc/systemd/system.confet /etc/systemd/user/conf:

  1. créer un nouveau fichier /etc/systemd/system.conf.d/limits.confavec ces contenus:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. exécuter en systemctl daemon-reexectant que root

  3. se déconnecter et se reconnecter

  4. vérifiez votre nouvelle limite avec ulimit -n.

Reportez-vous à la systemd-system.confpage de manuel pour plus de détails.

Marc.2377
la source
Sur mon système Ubuntu 18.10, le fichier en question est à /etc/systemd/system.conf. Faire le changement semble avoir fait l'affaire, merci.
Stephen Kennedy
1
La déconnexion pour moi n'a pas fonctionné (Ubuntu 18.04) mais le redémarrage a fait l'affaire. Solution très élégante, merci.
stann1
0

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

[email protected]:~$ ulimit -Hn
4096

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

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:

[email protected]:~$ ulimit -Hn
9999

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

Paresh Chauhan
la source
0
  1. modifier /etc/systemd/system/sonar.service

  2. ajoutez ces deux lignes sous Service

[Un service]

LimitMEMLOCK = infini

LimitNOFILE = 65535

  1. systemctl daemon-reload
  2. Systemctl redémarrer sonar

cela fonctionne pour moi.

Matthew Ma
la source
0

TL; DR J'ai ressenti le besoin de concentrer les réponses, donc elles sont plus faciles à trouver. Cela m'a pris beaucoup de temps pour rassembler toutes les pièces pour le faire fonctionner correctement ...

Il y a 2 endroits à considérer.

  1. Session GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    ou mieux ici:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. environnement shell

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    ou mieux ici:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Après avoir modifié les paramètres des fichiers ci-dessus, redémarrez puis vérifiez les limites avec: ulimit -n -Hn -Sn

UV
la source