Como um processo pode ter um limite de descritores de arquivos abertos maior do que aquele definido pelo limite rígido?

0

Estou usando o Solaris 11 e entendo que um usuário não privilegiado pode aumentar ou diminuir o limite flexível do máximo de descritores de arquivos abertos enquanto permanece dentro do limite máximo. Também é possível que um usuário sem privilégios diminua o limite rígido, mas não pode aumentar o limite rígido depois que ele for reduzido.

Estou com o seguinte cenário. Eu tenho um usuário não privilegiado cujos limites de hardware e hardware são definidos como seguindo usando o comando ulimit .

Limite suave: 10000

Limite rígido: 10000

-bash-4.4$ ulimit -n
10000
-bash-4.4$ ulimit -Hn
10000
-bash-4.4$ ulimit -Sn
10000

Isso significa que o usuário não deve poder iniciar nenhum processo com um limite máximo de descritores de arquivos abertos maiores que 10000. Mas não consigo explicar alguns processos que estão sendo executados como o mesmo usuário com um limite de descritores de arquivos abertos mais alto . Eu tenho vários desses processos em execução.

-bash-4.4$ plimit 12553
12553:  
   resource              current         maximum
  time(seconds)         unlimited       unlimited
  file(blocks)          unlimited       unlimited
  data(kbytes)          unlimited       unlimited
  stack(kbytes)         8192            unlimited
  coredump(blocks)      unlimited       unlimited
  nofiles(descriptors)  65536           65536
  vmemory(kbytes)       unlimited       unlimited

É um processo java e está sendo executado em uma Zona do Solaris . O processo pai é zsched . Todas as informações fornecidas são de dentro da zona. O comando do processo é mostrado abaixo também.

java -d64 -DAppName=java_app -server -Xms2048m -Xmx6144m -Xmn2040m - 

Eu não tenho muita informação sobre o processo em si e como ele foi lançado. Existe algum cenário específico que estou perdendo, que pode permitir que esse usuário não privilegiado use um limite de descritores de arquivos abertos mais alto?

Minhas suposições:

Esta informação pode ajudar. Na máquina em questão, o limite está sendo definido no arquivo /etc/profile usando o seguinte comando:

ulimit -n 10000

Isso significa que o arquivo é chamado toda vez que o usuário efetua login e o limite é aplicado. É minha suposição de que pode ser possível que tais processos não estejam sendo iniciados usando o login interativo normal ou mesmo um shell de não-login. O /etc/profile é chamado em um login interativo e em um shell interativo de não-login (conforme minha observação); portanto, um processo iniciado a partir desse shell não deve ter um limite de descritores de arquivo maior.

Pode ser devido a um shell não interativo, como scripts ou cron, que não precisa chamar /etc/profile e, assim, usar outro limite padrão. Mas olhando para esses processos, esse cenário parece improvável. Existem outras possibilidades?

Embora tenhamos suporte para o Solaris, a comunidade não é muito útil; por isso estamos contando com esses fóruns para qualquer ajuda.

    
por Alchemist 26.12.2017 / 13:10

1 resposta

1

Não tenho certeza se estou seguindo completamente o que você está perguntando.

As probabilidades são um SA adicionado as entradas ulimit em / etc / profile para um produto COTS (geralmente banco de dados) ou aplicativo personalizado.

A razão pela qual você está vendo um valor diferente via plimit poderia ser que o usuário / aplicativo poderia ter definido um valor diferente, ou poderia estar sendo escolhido por outro mecanismo de controle de recursos. ie: / etc / project

    
por 26.12.2017 / 21:23