web-dev-qa-db-fra.com

"Max open files" pour le processus de travail

Est-il possible d'augmenter le paramètre "Max open files" pour le processus de travail? Je veux dire ce paramètre:

cat /proc/<pid>/limits | grep files

Merci pour vos conseils

18
wako

En tant qu'administrateur système : le /etc/security/limits.conf fichier contrôle cela sur la plupart des installations Linux; il vous permet de définir des limites par utilisateur. Vous aurez besoin d'une ligne comme myuser - nofile 1000.

Dans un processus : Les appels getrlimit et setrlimit contrôlent la plupart des limites d'allocation de ressources par processus. RLIMIT_NOFILE contrôle le nombre maximum de descripteurs de fichiers. Vous aurez besoin des autorisations appropriées pour l'appeler.

22
user79758

Une autre option consiste à utiliser la commande prlimit (du package util-linux). Par exemple, si vous souhaitez définir le nombre maximal de fichiers ouverts pour un processus en cours d'exécution sur 4096:

prlimit -n4096 -p pid_of_process

18
rkachach

Vous pouvez utiliser gdb, interrompre le processus, appeler les appels système mentionnés ci-dessus pour augmenter la limite qui vous intéresse, puis continuer le travail et quitter gdb. J'ai édité des choses à la volée de cette façon plusieurs fois.

Votre application ne serait pas en panne, mais juste gelée pour le moment pendant que vous effectuez l'appel. si vous êtes rapide (ou si vous l'écrivez!), cela ne sera probablement pas perceptible.

6
lornix
echo -n "Max open files=20:20" > /proc/$pid/limits

... fonctionne dans RHEL5.5 et RHEL6.7.

Notez que le "-n" est obligatoire; une nouvelle ligne de fin générera une réclamation concernant des arguments non valides.

5
Stephen P. Schaefer

Oui, il est possible d'augmenter les limites dans /proc/<pid>/limits lors de l'exécution. Trouvez simplement le pid et exécutez la commande ci-dessous:

echo -n "Max open files=20:20" > /proc/$pid/limits
5
Gaurav KS

Ce lien détaille comment changer cela à l'échelle du système ou par utilisateur .

De nombreuses applications telles que la base de données Oracle ou le serveur Web Apache ont besoin de cette plage bien plus élevée. Vous pouvez donc augmenter le nombre maximal de fichiers ouverts en définissant une nouvelle valeur dans la variable de noyau/proc/sys/fs/file-max comme suit (connectez-vous en tant que root):

$ sysctl -w fs.file-max = 100000

Vous devez éditer le fichier /etc/sysctl.conf et mettre la ligne suivante pour qu'après le redémarrage, le paramètre reste tel quel

5
Brian Agnew

Les commandes suivantes donnent le nombre maximum de fichiers ouverts par processus autorisé par les limites par défaut (soft et hard respectivement):

ulimit -Sa
ulimit -Ha

Vous pouvez utiliser un programme ou une commande pour modifier ces limites. Regardez ulimit (homme ulimit).

4
Ravi

Sur Ubuntu 16.04, avec un processus rethinkdb en cours d'exécution, aucune de ces solutions ne fonctionnait.

J'ai continué à obtenir error: accept() failed: Too many open files.

Ce qui a finalement fonctionné était ceci dans mon /etc/security/limits.conf fichier. Notez le nproc en plus du nofile. Si je comprends bien, root doit être spécifié séparément.

*                soft    nofile          200000
*                hard    nofile          1048576
root             soft    nofile          200000
root             hard    nofile          1048576
*                soft    nproc           200000
*                hard    nproc           1048576
root             soft    nproc           200000
root             hard    nproc           1048576

Vous pouvez voir les fichiers système max en exécutant cat /proc/sys/fs/file-max. Je viens de définir le mien à un maximum élevé bien en raison de la taille du serveur.

Vous pouvez vérifier le nombre maximal de fichiers ouverts autorisés par votre processus en exécutant cat /proc/{your-pid}/limits.

Message utile: https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a

0
Nick Woodhams