O limite de arquivos abertos do daemon é alcançado mesmo que os limites do sistema tenham sido aumentados

3

Estou executando o Debian wheezy. Os limites de arquivo são aumentados para 100.000 para cada usuário. ulimit -a e ulimit -Hn / -Sn mostram as quantidades certas de limites máximos de arquivos abertos, mesmo na tela. Mas, por algum motivo, não consigo ter mais de ~ 4000 conexões / arquivos abertos.

de sysctl.conf :

net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 500 65000
net.core.somaxconn = 81920

Saída de ulimit -a :

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256639
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 999999
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256639
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

por exemplo, redis:

client: benchmark com 100 clientes

Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Error: Connection reset by peer

informações do servidor:

127.0.0.1:6379> info clients
-Clients
connected_clients:4005
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

Java:

Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
java.io.IOException: Too many open files
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files

ls -l /proc/[id]/fd | wc -l mostra ~ 4000 descritores

    
por Sven Neumann 12.10.2014 / 20:30

1 resposta

3

Existem duas configurações que limitam o número de arquivos abertos: um limite por processo e um limite para todo o sistema. O limite de todo o sistema é definido pelo fs.file-max sysctl, que pode ser configurado em /etc/sysctl.conf (lido durante a inicialização) ou definido em tempo real com o sysctl ou escrevendo para /proc/sys/fs/file-max . O limite por processo é definido por ulimit -n .

O limite por processo é herdado por cada processo de seu pai. Um valor padrão pode ser definido em /etc/security/limits.conf , mas isso se aplica somente a sessões interativas, não a daemons iniciados no momento da inicialização. Ele será aplicado a um daemon somente se for iniciado por meio de uma sessão interativa.

Para aumentar (ou diminuir) os limites por processo de um daemon, em geral, edite seu script de inicialização e adicione uma chamada a ulimit antes de o daemon ser iniciado. O pacote Debian redis vem com uma configuração em um arquivo separado: /etc/default/redis . Comente a linha ULIMIT= e aumente o valor, se necessário.

    
por 13.10.2014 / 00:27