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.