Comment augmenter la limite maximale de fichiers ouverts sur Ubuntu 18.04?

16

J'ai couru ulimit -n 65536, ajouté les lignes suivantes à /etc/security/limits.conf:

*    soft nofile 65536
*    hard nofile 65536
alix soft nofile 65536
alix hard nofile 65536
root soft nofile 65536
root hard nofile 65536

Et ajouté session required pam_limits.soaux deux:

  • /etc/pam.d/common-session
  • /etc/pam.d/common-session-noninteractive

Et fs.file-max = 65536à /etc/sysctl.d/60-file-max.conf.

Pourtant, après avoir redémarré et exécuté ulimit -nma session, je n'obtiens que 4096 (au lieu de 1024 auparavant).

Qu'est-ce que je rate?

Alix Axel
la source

Réponses:

12

Du manuel:

 -n     The maximum number of open file descriptors (most
        systems do not allow this value to be set)

systemd a une option pour cela:

$ more /etc/systemd/system.conf | grep NOFILE
#DefaultLimitNOFILE=

Mais ce n'est également que pour les paramètres utilisateur graphiques. Supprimez le #et vous pouvez le définir sur 65536.

Commentaire de Daniel Fernández :

DefaultLimitNOFILE=65536 

pourrait également être nécessaire dans

/etc/systemd/user.conf 
Rinzwind
la source
1
J'ai oublié de mentionner, je l'ai aussi fait.
Alix Axel
1
@AlixAxel: Cette réponse a fonctionné pour moi, en plus de * - nofile 16384(je n'essayais que 16384) dans /etc/security/limits.conf.
Doug Smythies
Le 65k est une hypothèse et on s'attendrait à ce qu'il y ait des limites codées en dur sur la face supérieure de ce qui est autorisé. Vous voudrez peut-être commencer plus bas comme Doug l'a indiqué;)
Rinzwind
Qu'entendez-vous par «mais cela ne concerne que les paramètres graphiques de l'utilisateur»?
sinan
1
Un réglage de note DefaultLimitNOFILE=65536pourrait également être nécessaire dans/etc/systemd/user.conf
Daniel Fernández
2

Ubuntu 18.04 étape par étape

J'espère que tout cela aide, assez longtemps mais ça marche (avec preuve)

Je suis tombé sur ce fil lors de l'installation de MongoDb sur Ubuntu 18.04

https://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

Comme vous pouvez le voir, c'est assez ancien, mais cela fonctionne pour moi.

Voici ce que j'ai fait.

  1. Paramètres recommandés de MongoDb ( https://docs.mongodb.com/manual/reference/ulimit/#review-and-set-resource-limits )

    • -f (taille de fichier): illimité
    • -t (temps processeur): illimité
    • -v (mémoire virtuelle): illimité [1]
    • -l (taille verrouillée en mémoire): illimité
    • -n (fichiers ouverts): 64000
    • -m (taille de la mémoire): illimité [1] [2]
    • -u (processus / threads): 64000
  2. Vérifier mes limites actuelles

ubuntu @ isdb-stage: ~ $ ulimit -a
taille du fichier principal (blocs, -c) 0
taille de segment de données (kilo-octets, -d) illimitée
priorité de planification (-e) 0
taille de fichier (blocs, -f) illimité
signaux en attente (-i) 7873
mémoire verrouillée max. (kilo-octets, -l) 16384
taille maximale de la mémoire (kilo-octets, -m) illimitée
fichiers ouverts (-n) 1024
taille du tuyau (512 octets, -p) 8
Files d'attente de messages POSIX (octets, -q) 819200
priorité en temps réel (-r) 0
taille de la pile (kilo-octets, -s) 8192
temps processeur (secondes, -t) illimité
processus utilisateur max (-u) 7873
mémoire virtuelle (kilo-octets, -v) illimitée
verrous de fichiers (-x) illimités
  1. Prenez note de ce qui doit être changé

    • la taille de la mémoire verrouillée doit être définie sur un nombre illimité.
    • fichiers ouverts , doit être défini sur 64000
    • processus / threads * , doit être défini sur 64000
  2. Que dit ubuntu sur la façon de modifier ces limites?

$ man limits.conf

NOM
   limits.conf - fichier de configuration pour le module pam_limits

LA DESCRIPTION
   Le module pam_limits.so applique des limites ulimit, une belle priorité et une limite de nombre de sessions de connexion simultanées aux sessions de connexion utilisateur. Cette description de la syntaxe du fichier de configuration s'applique à la

       /etc/security/limits.conf et les fichiers * .conf dans le 
       répertoire /etc/security/limits.d.
  1. Cela semble assez clair, modifiez le fichier /etc/security/limits.conf. Ok laisse le comprendre ....

Voici le début de ce fichier, et regardez, il contient même des instructions, bien sûr, rappelez-vous que c'est un open source écrit par les bons! :)

    vi /etc/security/limits.conf

    # /etc/security/limits.conf 
    #Chaque ligne décrit une limite pour un utilisateur sous la forme:                                                                   
    #                                                                                
    #Où:                                                               
    # peut être:
    # - un nom d'utilisateur

(Jetez un œil au fichier vous-même si vous voulez plus de détails)
  1. Enfin, apportez les modifications. Étant donné que MongoDb fonctionne en tant que groupe mongodb et utilisateur, il serait judicieux d'augmenter uniquement les limites des utilisateurs. J'ai vu «*» utilisé ici et là, pour moi c'est un risque pour la sécurité. Il donne à tout le monde sur le serveur ces limites, qui pourraient être utilisées pour maximiser votre serveur. Permet donc de les faire pour l'utilisateur mongodb uniquement.

Voici mes changements: -

mongodb soft memlock illimité
mongodb hard memlock unlimited
mongodb soft nofile 64000
mongodb hard nofile 64000
mongodb soft nproc 64000
mongodb hard nproc 64000
  1. Enfin, souvenez-vous de cela dans l'entrée man limits.conf.

    limits.conf - fichier de configuration pour le module pam_limits

    Assurez-vous que le module pam_limits est chargé pour que tout cela fonctionne. Pour ce faire, vous modifiez /etc/pam.d/common-session. Bien sûr, cela se trouve également dans la page de manuel.

sudo vi /etc/pam.d/common-session

# Ajoutez ceci pour vous assurer que pam_limits.so est chargé.
session requise pam_limits.so

Un redémarrage montrera que les limites (pour l'utilisateur mongodb) ont été appliquées. Si vous les avez appliqués à l'aide de '*' à la place, vous pouvez vérifier sans avoir à passer à l'utilisateur mongodb. Exécutez simplement cette commande.

$ ulimit -a

taille du fichier principal (blocs, -c) 0
taille de segment de données (kilo-octets, -d) illimitée
priorité de planification (-e) 0
taille de fichier (blocs, -f) illimité
signaux en attente (-i) 7873
mémoire verrouillée max (kilo-octets, -l) illimitée
taille maximale de la mémoire (kilo-octets, -m) illimitée
fichiers ouverts (-n) 64000
taille du tuyau (512 octets, -p) 8
Files d'attente de messages POSIX (octets, -q) 819200
priorité en temps réel (-r) 0
taille de la pile (kilo-octets, -s) 8192
temps processeur (secondes, -t) illimité
processus utilisateur max (-u) 64000
mémoire virtuelle (kilo-octets, -v) illimitée
verrous de fichiers (-x) illimités

Comme vous pouvez le voir, jubilement, tout est fixé aux limites que nous voulions.

englishPete
la source