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.
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.
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.
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
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:
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
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).
Je l'ai fait comme ça
echo "NEO4J_ULIMIT_NOFILE=50000" >> neo4j
mv neo4j /etc/default/
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.
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
Configuration ULIMIT:
Faire ci-dessous l'entrée
website soft nofile 8192
website hard nofile 8192
website soft nproc 4096
website hard nproc 8192
website soft core unlimited
website hard core unlimited
Faire l'entrée ci-dessous pour TOUS LES UTILISATEURS
* soft nofile 8192
* hard nofile 8192
* soft nproc 4096
* hard nproc 8192
* soft core unlimited
* hard core unlimited
Après avoir modifié le fichier, l'utilisateur doit se déconnecter et se reconnecter pour voir les nouvelles valeurs.