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

8

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

maxschlepzig
fonte

Respostas:

16

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 o limite máximo e mínimo para processos iniciados sob a transmissão debian do usuário para 8192)

Você pode verificar a alteração via:

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

Se um daemon já estiver em execução, ele deverá ser reiniciado para que o novo limite seja atendido. Caso o daemon seja iniciado manualmente a partir de uma sessão do usuário, o usuário precisará efetuar login novamente para obter o novo limite.

Como alternativa, você também pode especificar limites adicionais diretamente /etc/security/limits.conf, é claro - mas eu prefiro a .dabordagem de diretório para melhor manutenção.

Para impor diferentes limites flexíveis / rígidos, use duas entradas, por exemplo

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

(justificativa por trás disso: o valor programável é definido após o usuário efetuar login, mas um processo do usuário pode aumentar o limite até o limite físico)

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

Relacionado

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

Este arquivo define um limite para todo o sistema do número de arquivos abertos para todos os processos.

Por exemplo, o padrão no Ubuntu 10.04:

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

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

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

o número de identificadores de arquivos alocados (ou seja, o número de arquivos atualmente abertos); o número de identificadores de arquivo gratuitos; e o número máximo de identificadores de arquivo

Portanto, por um lado, também é necessário ajustar o file-maxlimite de todo o sistema , caso este seja muito pequeno e / ou o sistema já esteja muito carregado. Por outro lado, apenas aumentar file-maxnão é suficiente, porque não influencia os limites flexíveis / rígidos impostos pelo mecanismo pam_limits.

Para alterar file-maxna linha de comando (não é necessário reiniciar):

# sysctl -w fs.file-max=786046

Para alterações permanentes adicionar fs.file-max=786046ao /etc/sysctl.confou /etc/sysctl.d.

O limite superior ativado 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.

maxschlepzig
fonte
1
Obrigado por último bit de informação - Eu estava coçando a cabeça tentando descobrir por que eu não poderia definir um usuário nofile maior limite de 1048576 em /etc/security/limits.conf
Liczyrzepa