Muitos arquivos abertos no Debian

15

Eu tenho um processo de longa execução no Debian. Em algum momento, lançar um erro:

Too many open files.

Em exibição:

ulimit -a

mostra:

open files (-n) 1024

Eu desejo aumentar o número de arquivos abertos em 2 vezes. Após a execução

ulimit -n 2048

o limite está ativo até o final da minha sessão, o que não é aplicável para a tarefa.

Como posso aumentar permanentemente o número de arquivos abertos?

    
por FoxyBOA 05.06.2009 / 12:00

7 respostas

11

Se o seu processo for iniciado por meio de um script, você poderá colocar a chamada para ulimit no script antes de executar o daemon.

Se você deseja aumentar o ulimit para seu usuário ou para todos os usuários, é possível definir limites aplicados por meio de pam_limits no login. Estes são definidos em /etc/security/limits.conf . No seu caso, você poderia fazer algo como:

*               hard    nofile             2048

Note que "hard" denota um limite rígido - um que não pode ser excedido e não pode ser alterado. Um limite flexível pode ser alterado por um usuário (por exemplo, alguém sem recursos de raiz), mas não além do limite máximo.

Leia o limits.conf para mais informações sobre o uso de pam_limits .

    
por 05.06.2009 / 12:13
11

Existe também um "total máximo" de arquivos abertos no kernel, você pode verificar a configuração atual com:

cat /proc/sys/fs/file-max 

E defina um novo valor com:

echo "104854" > /proc/sys/fs/file-max

Se você quiser manter a configuração entre as reinicializações, adicione

sys.fs.file-max=104854

para

/etc/sysctl.conf

Para verificar o uso atual do arquivo max:

[root@srv-4 proc]# cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)
    
por 05.06.2009 / 12:25
4

Como outros já disseram, você pode aplicar limites específicos por usuário ou grupo em /etc/security/limits.conf.

Nota: ulimit -n mostra o limite suave.

ulimit -H -n 

mostrará o limite rígido.

Isto torna ulimit -a e ulimit -n output bastante confuso se, por exemplo, você estivesse aumentando o número de arquivos de 1024 para 4096, como seria de esperar para ver a saída do limite máximo, mas você ainda está vendo 1024 quais é o limite suave.

Além disso, lembre-se de que esses limites são impostos por login, portanto, faça login novamente em um novo shell e verifique suas alterações, não espere que elas sejam propagadas para logins existentes.

    
por 05.06.2009 / 12:35
2

Lembre-se de que, se você executar o processo por ulimits start-stop-daemon, em /etc/security/limits.conf não funcionará. Se, por exemplo, você quiser aumentar o limite de arquivos abertos para o tomcat para 20000, será necessário adicioná-los às linhas para /etc/default/tomcat :

ulimit -Hn 32768
ulimit -Sn 32768

Eu encontrei este problema no debian 6.0.4 Para outro processo, as respostas dadas devem ajudar.

    
por 30.01.2012 / 12:54
1

Depende de como você inicia seu processo de longa duração. Se for iniciado no momento da inicialização (via scripts /etc/rcX.d/*), você deverá colocar uma chamada ulimit em seu script de inicialização, pois o limite padrão é definido pelo kernel e não é ajustável sem recompilá-lo.

Usar /etc/security/limits.conf poderia funcionar se você usar cron para iniciá-lo, por exemplo, com uma entrada como esta:

@reboot $HOME/bin/my-program

Isso deve funcionar porque /etc/pam.d/cron habilita pam_limits.so.

    
por 06.06.2009 / 14:15
-1

Um comando muito legal é ulimit -n , mas há um problema com muitas conexões e muitos arquivos abertos:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 519357
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
    
por 17.03.2013 / 02:08
-1

Você pode adicionar isso em /etc/security/limits.conf

root soft nofile 100000
root hard nofile 100000

salve e reinicie.

    
por 12.12.2014 / 12:46