Eu tenho um longo processo de execução que eventualmente atingirá o limite máximo de arquivos abertos. Eu sei como mudar isso depois que falha, mas existe uma maneira de mudar isso para o processo em execução, na linha de comando?
27
Conforme documentado aqui , o
prlimit
comando, introduzido no util-linux 2.21, permite ler e alterar os limites dos processos em execução.Este é um acompanhamento do gravável
/proc/<pid>/limits
, que não foi integrado no kernel da linha principal. Esta solução deve funcionar.Se você ainda não possui
prlimit(1)
, poderá encontrar o código para uma versão minimalista na página deprlimit(2)
manual .fonte
Na versão mais recente do util-linux-ng, você pode usar o comando prlimit, para obter mais informações, leia este link /superuser/404239/setting-ulimit-on-a-running-process
fonte
Você pode tentar ulimit
man ulimit
com a opção -n, no entanto, a página mag não permite que a maioria dos sistemas operacionais não permita que isso seja definido.Você pode definir um limite de descrições de arquivos para todo o sistema usando
sysctl -w fs.file-max=N
e fazer as alterações persistirem após a inicialização no/etc/sysctl.conf
No entanto, eu também sugeriria examinar o processo para ver se ele realmente precisa abrir tantos arquivos em um determinado momento e se você pode fechar alguns arquivos e ser mais eficiente no processo.
fonte
ulimit
não aplica configurações aos processos em execução .O processo pode alterar seus próprios limites flexíveis se programado para fazê-lo (ou se você conseguir hackear), mas não poderá aumentar seus limites rígidos, a menos que possua o recurso CAP_SYS_RESOURCE. Você pode inspecionar os limites no tempo de execução em
/proc/$pid/limits
.fonte