Comment définir une limite sur le nombre de fichiers que Linux peut ouvrir?


11

Je prévois d'exécuter une application Java en utilisant nohup ... &. La limite doit s'appliquer à des commandes comme celle-ci.


Mais cela a provoqué une erreur dans mon programme java

Réponses:


7

La plupart des systèmes utilisent PAM et les pam_limitslimites de module sont basées sur /etc/security/limits.conf. La limite par utilisateur pour les fichiers ouverts est appelée nofile. Vous pouvez le définir pour chaque utilisateur ou pour un utilisateur ou un groupe particulier, et vous pouvez définir une limite que l'utilisateur peut remplacer (limite souple) et une autre que seule la racine peut remplacer (limite stricte). La documentation et la limits.confpage de manuel contiennent les détails. Par exemple, pour augmenter la limite à 50000 pour tout le monde, mettez cette ligne /etc/limits.conf(le paramètre prend effet lorsque vous vous connectez):

* - nofile 50000

au sein de limits.confdo * hard nofile 50000et / ou * soft nofile 50000. Je ne connais pas la différence technique entre le dur et le doux et j'ai toujours fait les deux.
ron

dans SLES 11.4 en utilisant tcsh par exemple, on peut faire limit descriptors 50000pour changer la valeur dans la fenêtre / session de terminal donnée.
ron

@ron -` dans la deuxième colonne définit à la fois la limite douce et la limite dure. Vous ne devez les définir séparément que si vous souhaitez des valeurs différentes. Une limite logicielle peut être modifiée à tout moment en exécutant la ulimitcommande (appelée limitdans csh). Un utilisateur non privilégié ne peut jamais dépasser la limite maximale.
Gilles 'SO- arrête d'être méchant'

si je ne règle que le dur, la valeur douce reste-t-elle la valeur par défaut? si je fixe uniquement soft et pas hard, hard reste-t-il la valeur par défaut ou une valeur soft intrinsèquement égale? Puis-je définir doux> dur? Le soft est la vraie valeur qui est en vigueur? désolé pour les questions.
ron

@ron La limite souple est automatiquement plafonnée à la limite dure. Si vous définissez uniquement la limite fixe, cela définit la limite souple à max (default_soft_limit, actual_hard_limit).
Gilles 'SO- arrête d'être méchant'

4

vous pouvez ajouter fs.file-max = <your number>en /etc/sysctl.conf. Redémarrez ensuite.


cat / proc / sys / fs / file-max est 169203 , mais ulimit -n est 1024

Pas besoin de redémarrer. Courez sysctl fs.file-max=123456. ( /etc/sysctl.confest lu au démarrage par un script qui fait appel sysctlau contenu.)
Gilles 'SO- arrête d'être méchant'

3
ulimit -n

peut modifier les paramètres de processus et

/proc/sys/fs/file-max

ou la variable sysctl appelée fs.file-maxpeut être utilisée pour lire et définir la valeur à l'échelle du système


cat / proc / sys / fs / file-max est 169203 , mais ulimit -n est 1024

1

Vous pouvez utiliser ulimit pour cela:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Bien que vous deviez vous assurer que l'ouverture d'autant de descripteurs de fichiers est absolument nécessaire avant de recourir à de tels ajustements. Augmenter le nombre maximal de descripteurs de fichiers simplement parce que vous avez oublié de faire un inputstream.close () dans une boucle ne fera que retarder le problème sous-jacent.


1
Je veux me connecter à de nombreux clients

1

Utilisez ulimit (commande Bash - man bash ou trouver similaire pour votre shell) par instance de programme. N'utilisez pas les limites globales du système si vous ne savez pas ce que vous faites - DoS possible.


Dans SLES 11.4 J'ai mis nofileen limits.confêtre 100000 avec succès. Je peux attester que la définition d'une valeur trop grande a empêché une connexion ultérieure avec SSH et j'ai dû démarrer à partir du DVD pour corriger cette valeur dans limits.conf pour récupérer le système.
ron

0
vi ~/.bashrc

Et ajoutez une ligne à la fin du fichier

ulimit -n 169203
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.