J'ai un long processus qui va finalement atteindre la limite maximale de fichiers ouverts. Je sais comment changer cela après un échec, mais existe-t-il un moyen de changer cela pour le processus en cours, à partir de la ligne de commande?
27
Comme indiqué ici , la
prlimit
commande, introduite avec util-linux 2.21, vous permet de lire et de modifier les limites des processus en cours d'exécution.Il s'agit d'une suite à l'écriture
/proc/<pid>/limits
, qui n'était pas intégrée au noyau principal. Cette solution devrait fonctionner.Si vous ne l'avez pas
prlimit(1)
encore, vous pouvez trouver le code dans une version minimaliste dans laprlimit(2)
page de manuel .la source
Sur la nouvelle version d'util-linux-ng, vous pouvez utiliser la commande prlimit, pour plus d'informations, lisez ce lien /superuser/404239/setting-ulimit-on-a-running-process
la source
Vous pouvez essayer ulimit
man ulimit
avec l'option -n, mais la page mag ne permet pas à la plupart des OS de définir cela.Vous pouvez définir une limite de descriptions de fichiers à l'échelle du système en utilisant
sysctl -w fs.file-max=N
et faire persister les modifications après le démarrage dans/etc/sysctl.conf
Cependant, je suggérerais également d'examiner le processus pour voir s'il doit vraiment avoir autant de fichiers ouverts à un moment donné, et si vous pouvez en fait fermer certains fichiers et être plus efficace dans le processus.
la source
ulimit
n'applique pas de paramètres aux processus en cours d' exécution .Le processus peut modifier ses propres limites logicielles s'il est programmé pour le faire (ou si vous parvenez à le pirater), mais il ne peut pas augmenter ses limites matérielles à moins qu'il n'ait la capacité CAP_SYS_RESOURCE. Vous pouvez inspecter les limites lors de l'exécution dans
/proc/$pid/limits
.la source