web-dev-qa-db-fra.com

Définir la limite maximale de fichiers sur un processus en cours d'exécution

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?

29
kāgii

Sur les noyaux plus récents (2.6.32+) sur CentOS/RHEL, vous pouvez changer cela au moment de l'exécution avec/proc/<pid>/limits:

cd /proc/7671/
[root@Host 7671]# cat limits  | grep Nice
Max Nice priority         0                    0                    
[root@Host 7671]# echo -n "Max Nice priority=5:6" > limits
[root@Host 7671]# cat limits  | grep Nice
Max Nice priority         5                    6                    
29
Sig-IO

Comme documenté ici , la commande prlimit, 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'un suivi du /proc/<pid>/limits Inscriptible, qui n'était pas intégré au noyau principal. Cette solution devrait fonctionner.

Si vous n'avez pas encore prlimit(1), vous pouvez trouver le code vers une version minimaliste dans la page de manuel prlimit(2) .

29
Sig-IO

Sur la nouvelle version d'util-linux-ng, vous pouvez utiliser la commande prlimit, pour plus d'informations, lisez ce lien https://superuser.com/questions/404239/setting-ulimit-on-a-running-process =

4
c4f4t0r

Vous pouvez essayer ulimit man ulimit avec l'option -n mais la page mag n'autorise pas la plupart des OS à le définir.

Vous pouvez définir une limite de descriptions de fichiers à l'échelle du système à l'aide de sysctl -w fs.file-max=N et que les modifications persistent après le démarrage dans /etc/sysctl.conf

Cependant, je suggérerais également de regarder le processus pour voir s'il a vraiment besoin d'ouvrir autant de fichiers à un moment donné, et si vous pouvez en fait fermer certains fichiers et être plus efficace dans le processus.

2
Oneiroi

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.

0
Tobu