Quais são os perigos de definir um limite alto para o máximo de descritores de arquivo por processo?

3

Estou trabalhando em um antigo aplicativo herdado e geralmente me deparo com certas configurações que ninguém ao redor explica.

Aparentemente, em algum momento, alguns processos no aplicativo estavam atingindo o número máximo de descritores de arquivos permitidos por processo, e a equipe decidiu aumentar o limite adicionando o seguinte aos arquivos init de seus shells (.kshrc):

((nfd=16#$(/etc/sysdef | grep "file descriptor" | awk '{ print $1 }' | cut -f3 -d "x")))

ulimit -n $nfd

Isso aumenta a saída de ulimit -n de 256 para 65536. Praticamente todos os processos em nossas máquinas são executados com esse limite alto e suave.

Existe algum risco de ter essa abordagem bruta? Qual é a maneira correta de calibrar ulimit ?

Pergunta secundária: Como posso saber o número de FD atualmente em uso por um processo em execução?

Ambiente

  • SO: SunOS .... 5.10 Generic_120011-14 sun4u sparc SUNW, Sun-Fire-V215
  • Shell: Versão KsH M-11/16 / 88 i
por rahmu 04.09.2012 / 15:19

2 respostas

3

Para ver o número de descritores de arquivos em uso por um processo em execução, execute pfiles no id do processo.

Pode haver impacto no desempenho de aumentar o número de fds disponíveis para um processo, dependendo do software e de como ele é escrito. Os programas podem usar o número máximo de fd para dimensionar estruturas de dados, como select(3c) arrays bitmask, ou execute operações como fechar em um loop sobre todos os fds (embora o software escrito para Solaris possa usar o fdwalk(3c) função para fazer isso apenas para o fd aberto em vez do valor máximo possível).

    
por 04.09.2012 / 18:41
2

Vimos um problema em que precisávamos restringir o shell do aplicativo para ter apenas 256 descritores de arquivo disponíveis. O aplicativo era muito antigo e aparentemente estava usando o número máximo de fd's e tentou colocar esse número em uma variável do tipo 'unsigned char' que pode suportar apenas o inteiro 256 (resultando em dump principal). Então, para este aplicativo em particular, tivemos que restringi-lo para ter apenas 256 fd disponíveis.

Eu realmente não acredito, ao contrário de alanc, que pode haver qualquer impacto mensurável no desempenho de definir isso muito alto, como você sugere. A razão para não fazê-lo seria mais ao longo das linhas de impedir que processos desonestos consumam muitos recursos.

Por fim, a alanc está certa de que o comando pfiles informará o número de fd atualmente em uso por um determinado processo. No entanto, lembre-se de que o comando pfiles interrompe temporariamente o processo para inspecioná-lo. Eu vi os processos travarem como resultado do comando pfiles sendo executado contra eles ... mas admito que podem ter sido casos difíceis que você nunca encontrará em seus aplicativos. Desculpe, eu não sei de maneira segura de procurar o número atual de fd em uso por um processo. Minha recomendação: Sempre monitore se o processo ainda existe depois de executar o comando pfiles .

    
por 28.01.2013 / 11:49