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 à la fin générera une plainte concernant des arguments non valides.
Une autre option consiste à utiliser la commande prlimit (du paquet util-linux). Par exemple, si vous souhaitez définir le nombre maximum de fichiers ouverts pour un processus en cours d'exécution sur 4 096 :
prlimit -n4096 -p pid_of_process
Vous pouvez utiliser gdb, entrer dans le processus, appeler les appels système susmentionnés pour augmenter la limite qui vous intéresse, puis continuer le travail et quitter gdb. J'ai modifié 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 effectuiez l'appel. si vous êtes rapide (ou si vous le scénarisez !), cela ne se remarquera probablement pas.
En tant qu'administrateur système :Le /etc/security/limits.conf
file contrôle cela sur la plupart des installations Linux ; il vous permet de définir des limites par utilisateur. Vous voudrez 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.