web-dev-qa-db-fra.com

Comment augmenter la limite maximale d'ouverture de fichiers de Neo4j (ulimit) dans Ubuntu?

Actuellement ulimit -n affiche 10000. Je veux l'augmenter à 40000. J'ai édité "/etc/sysctl.conf" et mis fs.file-max=40000. J'ai également édité /etc/security/limits.conf et mis à jour les valeurs fixes et variables. Mais toujours ulimit montre 10000. Après avoir apporté toutes ces modifications, j'ai redémarré mon ordinateur portable. J'ai accès au mot de passe root.

usr_name@usr_name-lap:/etc$ /sbin/sysctl fs.file-max
fs.file-max = 500000

Ajout des lignes suivantes dans /etc/security/limits.conf -

*     soft    nofile          40000
*     hard    nofile          40000

J'ai aussi ajouté la ligne suivante dans /etc/pam.d/su-

session    required   pam_limits.so

J'ai essayé de toutes les manières possibles comme indiqué sur d'autres forums, mais je peux atteindre une limite maximale de 10000, mais pas au-delà. Quel peut être le problème?

J'effectue cette modification car neo4j lève le nombre maximal de fichiers ouverts atteint.

76
theharshest

J'utilise Debian mais cette solution devrait fonctionner correctement avec Ubuntu.
Vous devez ajouter une ligne dans le script neo4j-service.
Voici ce que j'ai fait:

nano /etc/init.d/neo4j-service
Ajouter "limit –n 400" juste avant la ligne ligne start-stop-daemon dans le section do_start

Notez que j'utilise la version 2.0 Enterprise Edition. J'espère que cela vous aidera.

8
Martin Larivière

Ce que vous faites ne fonctionnera pas pour l'utilisateur root. Vous exécutez peut-être vos services en tant que root et vous ne voyez donc pas le changement.

Pour augmenter le nombre d'utilisateurs ulimit pour root, vous devez remplacer le * par root. * ne s'applique pas à l'utilisateur root. Le repos est le même que vous avez fait. Je vais le citer à nouveau ici.

Ajoutez les lignes suivantes au fichier: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

Et ajoutez ensuite la ligne suivante dans le fichier: /etc/pam.d/common-session

session required pam_limits.so

Ceci mettra à jour le ulimit pour l'utilisateur root. Comme mentionné dans les commentaires, vous n'aurez peut-être même pas besoin de redémarrer pour voir le changement.

82
Sambhav Sharma

1) Vérifiez la limite sysctl file-max:

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

Si la limite est inférieure à la valeur souhaitée, ouvrez le sysctl.conf et ajoutez cette ligne à la fin du fichier:

fs.file-max = 65536

Enfin, appliquez les limites sysctl:

$ sysctl -p 

2) Éditez /etc/security/limits.conf et ajoutez ci-dessous le

* soft     nproc          65535    
* hard     nproc          65535   
* soft     nofile         65535   
* hard     nofile         65535

Ces limites ne s'appliquent pas à l'utilisateur root. Si vous souhaitez modifier les limites root, vous devez le faire explicitement:

root soft     nofile         65535   
root hard     nofile         65535
...

3) Redémarrez le système ou ajoutez la ligne suivante à la fin de /etc/pam.d/common-session:

session required pam_limits.so

Déconnectez-vous et connectez-vous à nouveau.

4) Vérifier les limites souples:

$ ulimit -a

et limites strictes:

$ ulimit -Ha
....

open files                      (-n) 65535

Référence: http://ithubinfo.blogspot.in/2013/07/how-to-increase-ulimit-open-file-and.html

63
minhas23

J'avais le même problème et je l'ai obtenu en ajoutant des entrées à /etc/security/limits.d/90-somefile.conf. Notez que pour voir les limites fonctionner, je devais me déconnecter complètement de la session ssh, puis me reconnecter.

Je voulais définir la limite pour un utilisateur spécifique qui exécute un service, mais il semble que j'obtienne la limite définie pour l'utilisateur avec lequel je me connectais. Voici un exemple pour montrer comment ulimit est défini en fonction d'un utilisateur authentifié, et non de l'utilisateur effectif:

$ Sudo cat /etc/security/limits.d/90-nofiles.conf
loginuser    soft    nofile   10240
loginuser    hard    nofile   10240
root         soft    nofile   10241
root         hard    nofile   10241
serviceuser  soft    nofile   10242
serviceuser  hard    nofile   10242

$ whoami
loginuser
$ ulimit -n
10240
$ Sudo -i
# ulimit -n
10240    # loginuser's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

Vous pouvez utiliser un * pour spécifier une augmentation pour tous les utilisateurs. Si je redémarre le service en tant qu'utilisateur auquel je me suis connecté et que j'ajoute ulimit -n au script d'initialisation, je constate que les limites de l'utilisateur de connexion initial sont en place. Je n'ai pas eu l'occasion de vérifier quelles sont les limites utilisateur utilisées lors d'un démarrage système ni de déterminer quelle est la limite réelle du fichier nofile du service que j'exécute (démarrée avec start-stop-daemon).

Il y a 2 approches qui fonctionnent pour l'instant:

  1. ajoutez un ajustement ulimit au script init, juste avant start-stop-daemon.
  2. paramètres génériques ou plus étendus ulimit dans le fichier de sécurité.
3
Brett

J'ai beaucoup de mal à obtenir que cela fonctionne.

L'utilisation de ce qui suit vous permet de le mettre à jour indépendamment de votre autorisation utilisateur.

Sudo sysctl -w fs.inotify.max_user_watches=100000

Éditer

Je viens de voir cela d'un autre utilisateur également sur un autre site stackexchange (les deux fonctionnent, mais cette version en permanence met à jour le paramètre système, plutôt que temporairement):

echo fs.inotify.max_user_watches=100000 | Sudo tee -a /etc/sysctl.conf; 
Sudo sysctl -p
2
Layke

tl; dr définir les limites soft et hard

Je suis sûr que cela fonctionne comme prévu, mais je vais l'ajouter ici au cas où. Pour être complet, la limite est définie ici (voir ci-dessous pour la syntaxe): /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

et activé avec les éléments suivants dans /etc/pam.d/common-session:

session required pam_limits.so

Si vous définissez uniquement la limite fixe, ulimit -a affichera la valeur par défaut (1024): Si vous définissez uniquement le logiciel, la limite ulimit -a s'affichera (4096)

Si vous les définissez tous les deux, ulimit -a affichera la limite souple (jusqu'à la limite stricte du parcours).

2
jorfus

Je l'ai fait comme ça

echo "NEO4J_ULIMIT_NOFILE=50000" >> neo4j
mv neo4j /etc/default/
2
bigkahunaburger

Vous pouvez modifier le script d'initialisation pour que neo4j effectue un ulimit -n 40000 avant d'exécuter neo4j.

Cependant, je ne peux pas m'empêcher de penser que vous êtes en train d'aboyer le mauvais arbre. Est-ce que neo4j a légitimement besoin de plus de 10 000 descripteurs de fichiers ouverts? Cela ressemble beaucoup à un bogue dans neo4j ou à la façon dont vous l’utilisez. Je voudrais essayer de répondre à cela.

2
abligh

Essayez de lancer cette commande, cela créera un fichier *_limits.conf sous /etc/security/limits.d

echo "* soft nofile 102400" > /etc/security/limits.d/*_limits.conf && echo "* hard nofile 102400" >> /etc/security/limits.d/*_limits.conf

Il suffit de quitter le terminal, de se connecter à nouveau et de vérifier par ulimit -n qu'il sera configuré pour * utilisateurs

2
Mahattam

Configuration ULIMIT:

  1. Connexion par root
  2. vi security/limits.conf
  3. Faire ci-dessous l'entrée

    La configuration Ulimit démarre pour site Internet utilisateur

    website   soft   nofile    8192
    website   hard   nofile    8192
    website   soft   nproc    4096
    website   hard   nproc    8192
    website   soft   core    unlimited
    website   hard   core    unlimited
    
  4. Faire l'entrée ci-dessous pour TOUS LES UTILISATEURS

    Configuration Ulimit pour chaque utilisateur

    *   soft   nofile    8192
    *   hard   nofile    8192
    *   soft   nproc    4096
    *   hard   nproc    8192
    *   soft   core    unlimited
    *   hard   core    unlimited
    
  5. Après avoir modifié le fichier, l'utilisateur doit se déconnecter et se reconnecter pour voir les nouvelles valeurs.

1
Sandeep kr gupta