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
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.
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
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.
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.
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
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
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).
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