Limites no número de descritores de arquivos

27

Estou tentando instalar 389-ds , e isso me dá um aviso:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

Eu entendo os descritores de arquivos, mas não entendo os limites de soft e hard.

Quando executo cat /proc/sys/fs/file-max , recebo de volta 590432 . Isso deve implicar que eu posso abrir até 590432 arquivos (ou seja, ter até 590432 descritores de arquivos.

Mas quando executo ulimit , isso me dá resultados diferentes:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

Mas quais são os limites hard / soft de ulimit e como eles se relacionam com o número armazenado em /proc/sys/fs/file-max ?

    
por Rafael Adel 24.07.2013 / 10:52

1 resposta

32

De acordo com a documentação do kernel , /proc/sys/file-max é o número máximo, total e global de descritores de arquivos que o kernel irá alocar antes de asfixiar. Este é o limite do kernel, não do usuário atual. Então você pode abrir o 590432, desde que esteja sozinho em um sistema ocioso (modo de usuário único, sem daemons em execução).

Observe que a documentação está desatualizada: o arquivo foi proc/sys/fs/file-max por um longo tempo. Obrigado a Martin Jambon por apontar isso.

A diferença entre os limites de hardware e software é respondida aqui, em SE . Você pode aumentar ou diminuir um limite suave como um usuário comum, desde que você não ultrapasse o limite máximo. Você também pode diminuir um limite rígido (mas não pode aumentá-lo novamente para esse processo). Como superusuário, você pode aumentar e diminuir os limites de hardware e software. O esquema de limite duplo é usado para impor políticas do sistema, mas também permite que usuários comuns definam limites temporários para si mesmos e, posteriormente, os alterem.

Observe que, se você tentar diminuir um limite máximo abaixo do limite flexível (e não for o superusuário), receberá EINVAL de volta (Argumento inválido).

Assim, no seu caso particular, ulimit (que é o mesmo que ulimit -Sf ) diz que você não tem um limite flexível no tamanho dos arquivos escritos pelo shell e seus subprocessos . (provavelmente é uma boa ideia na maioria dos casos)

Sua outra chamada, ulimit -Hn , informa sobre o -n limit (número máximo de descritores de arquivos abertos), não o -f limit, e é por isso que o limite virtual parece maior que o limite rígido. Se você inserir ulimit -Hf , também receberá "ilimitado".

    
por 24.07.2013 / 14:20