Percebo que em uma nova imagem do CentOS que acabei de inicializar no EC2, o padrão ulimit é 1024 arquivos abertos, mas / proc / sys / fs / file-max está definido em 761.408 e estou imaginando como esses dois limites funcionam. juntos. Eu estou supondo que ulimit -n é um limite por usuário do número de descritores de arquivo, enquanto / proc / sys / fs / file-max é amplo em todo o sistema? Se for esse o caso, digamos que entrei duas vezes com o mesmo usuário - cada usuário conectado tem um limite de 1024 no número de arquivos abertos ou um limite de 1024 arquivos abertos combinados entre cada um desses usuários- em usuários?
E há muito impacto no desempenho ao definir seus descritores máximos de arquivos para um número muito alto, se o seu sistema nunca estiver abrindo muitos arquivos?
Respostas:
file-max
é o máximo de descritores de arquivo (FD) imposto no nível do kernel, que não pode ser superado por todos os processos sem aumentar. Oulimit
é aplicado em um nível de processo, que pode ser menor que ofile-max
.Não há risco de impacto no desempenho aumentando
file-max
. As distribuições modernas têm o FD máximo definido bastante alto, enquanto no passado exigia recompilação e modificação do kernel para aumentar para além de 1024. Eu não aumentaria o sistema inteiro, a menos que você tenha uma necessidade técnica.A configuração por processo geralmente precisa ser ajustada para atender a um daemon específico, seja um banco de dados ou um servidor da Web. Se você remover completamente o limite, esse daemon poderá esgotar todos os recursos de sistema disponíveis; ou seja, você não conseguiria resolver o problema, exceto pressionando o botão de reset ou o ciclo de energia. Obviamente, é provável que qualquer um desses itens danifique os arquivos abertos.
fonte
ulimit
limite não é por usuário, mas por processo! Veja unix.stackexchange.com/questions/55319/…Não sei se entendi completamente o significado dessa frase (o inglês não é minha língua materna). Se essa frase significa que a configuração ulimit para descritores de arquivo não é uma limitação por processo, a resposta aceita (AFAIK) está errada.
O que quero dizer é que, se algum usuário lançou 4 processos e a configuração ulimit para FDs é 1024, cada processo pode abrir 1024 FDs. O usuário não ficará limitado a 1024 FDs, mas aos processos iniciados por esse usuário.
Por exemplo:
Aqui está um exemplo perl em que atingimos o limite (é um limite por processo):
Resultado:
1021 porque havia três descritores de arquivos abertos antes de atingir o loop while (stdout, stdin e stderr)
Desculpe se estou completamente errado ou não entendi a resposta.
fonte