Como configurar o limite de arquivo aberto do processo de um usuário?

8

O limite de arquivo aberto padrão por processo é 1024 - digamos - Linux. Para certos daemons isso não é suficiente. Assim, a pergunta: Como alterar o limite de arquivos abertos para um usuário específico?

    
por maxschlepzig 04.05.2014 / 11:22

1 resposta

14

No Linux, você pode configurá-lo via limits.conf , por exemplo via

# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf

(que define os limites hard e soft para processos iniciados sob o usuário debian-transmission para 8192)

Você pode verificar a alteração por meio de:

# sudo -u debian-transmission bash -c "ulimit -a"
[..]
open files                      (-n) 8192
[..]

Se um daemon já estiver em execução, ele deve ser reiniciado para que o novo limite seja selecionado. Caso o daemon seja iniciado manualmente a partir de uma sessão de usuário, o usuário precisa fazer o login novamente para obter o novo limite.

Alternativamente, você também pode especificar limites adicionais diretamente em /etc/security/limits.conf , é claro - mas eu prefiro a abordagem do diretório .d para melhor manutenibilidade.

Para impor limites diferentes de soft / hard, use duas entradas, por exemplo

debian-transmission soft nofile 4096
debian-transmission hard nofile 8192

(lógica por trás disso: o valor do soft é definido depois que o usuário efetua o login, mas um processo do usuário pode aumentar o limite até o limite máximo)

A configuração limits.conf / limits.d é usada por pam_limits.so , que é ativada por padrão nas distribuições atuais do Linux.

Relacionado

Existe também um limite para todo o sistema no Linux, /proc/sys/fs/file-max :

This file defines a system-wide limit on the number of open files for all processes.

Por exemplo, o padrão no Ubuntu 10.04:

$  cat /proc/sys/fs/file-max
786046

O pseudo arquivo /proc/sys/fs/file-nr fornece mais informações, por exemplo

$ cat /proc/sys/fs/file-nr
1408    0   786046

the number of allocated file handles (i.e., the number of files presently opened); the number of free file handles; and the maximum number of file handles

Assim, por um lado, você também pode ter que ajustar o limite file-max do sistema, caso seja muito pequeno e / ou o sistema já esteja muito carregado. Por outro lado, apenas aumentar file-max não é suficiente, porque não influencia os limites soft / hard impostos pelo mecanismo pam_limits.

Para alterar file-max na linha de comando (não é necessário reinicializar):

# sysctl -w fs.file-max=786046

Para alterações permanentes, adicione fs.file-max=786046 a /etc/sysctl.conf ou /etc/sysctl.d .

O limite superior em fs.file-max é registrado em fs.nr_open . Por exemplo, (novamente) no Ubuntu 10.04:

$ sysctl -n fs.nr_open
1048576

(que é 1024 * 1024)

Este sysctl também é configurável.

    
por 04.05.2014 / 11:22