Request: EADDRINUSE ao conectar

Criado em 20 mar. 2012  ·  18Comentários  ·  Fonte: request/request

Estou tentando escrever um pequeno script para replicar um índice elasticsearch para outro índice elasticsearch.

Basicamente, preciso de uma conexão HTTP para um banco de dados de origem e para um banco de dados de destino. Pensei que minhas conexões seriam agrupadas automaticamente, mas depois de um curto período de execução deste código em 200.000 registros, recebo um

{[Erro: conectar EADDRINUSE] código: 'EADDRINUSE', errno: 'EADDRINUSE', syscall: 'conectar'}

Aqui estão as partes importantes do meu código:
https://gist.github.com/2128623

O que estou fazendo de errado?

Comentários muito úteis

Provavelmente, isso ocorre porque o Windows está ficando sem portas efêmeras.

Para corrigir, defina MaxUserPort para algo como 65000 abaixo de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters

Fonte: https://docs.oracle.com/cd/E26180_01/Search.94/ATGSearchAdmin/html/s1207adjustingtcpsettingsforheavyload01.html

Todos 18 comentários

Recebo a exceção EADDRINUSE após 16.000 solicitações para o servidor elasicsearch.

Usando OS X, nó 0.6.17.

Obtenha um erro semelhante com superagent.js, também, após 16.000 solicitações.

*

node.js: 201
jogue e; // erro process.nextTick ou evento 'error' no primeiro tick
^
Erro: conecte EADDRINUSE
em errnoException (net.js: 670: 11)
em conectar (net.js: 548: 19)
em net.js: 607: 9
em Array.0 (dns.js: 88: 18)
em EventEmitter._tickCallback (node.js: 192: 40)

Recebo o mesmo erro, apenas no Windows. Após cerca de 16.000 solicitações, o programa começa a obter erros EADDRINUSE. Eu tenho um Mac e um PC. O programa funciona bem no meu Mac.

[Error: connect EADDRINUSE] code: 'EADDRINUSE', errno: 'EADDRINUSE', syscall: 'connect'

Não defino nenhuma opção relacionada à conexão de rede em meu programa. Alguma ideia de por onde começar a investigação?

@isaacs houve um problema no Agente por acaso em que pisamos no soquete de uma forma estranha?

Olá, atualizei para o nó 0.10.0 e [email protected] e ainda tenho o mesmo problema. Devo registrar um novo problema ou podemos reabrir este? Ou esse problema é com o nó?
Obrigado

o link acima para o problema do OS X não era a causa?

Não, funciona bem no OSX. O problema está no Windows.

Acabei de reproduzir o problema sem o módulo de solicitação. Vou limpar meu projeto de reprodução e postá-lo no projeto de nó. Obrigado

@ sylvain-hamel Você já tem um bug para isso? Encontrei problemas semelhantes no Azure (Windows) e gostaria de descobrir o que está acontecendo.

@tp : Não, não investiguei mais o problema. Eu realmente acho que é específico do Windows. Naquela época, eu estava tentando importar em lote centenas de milhares de documentos para um banco de dados do Couch. O programa estava começando a falhar após cerca de 16.000 solicitações de poltrona (documentos). Isso foi para uma importação única para mim, então acabei pausando o programa por 5 minutos após cada 15.000 solicitações para deixar o sistema operacional fazer seu trabalho. Isso resolveu o problema para mim.

Continuo recebendo esse erro em cerca de 3.900 solicitações no Windows Server 2003 (e não é uma importação única para mim), alguma ideia de como devo lidar com isso?

Esta é a versão do Windows dos manipuladores de arquivos sendo excedida?

Resolvi meu problema fazendo um lote de 3.000 solicitações a cada 10 minutos. É feio, mas funciona.

Alguém já encontrou uma solução melhor para isso? No momento, estou enviando uma grande quantidade de solicitações para um servidor node js com solicitação, e ele também morre após cerca de 16.000 registros. Estou trabalhando no Windows e, depois que ele atinge o tempo limite na marca de 16.000, leva quase exatamente 100 segundos antes de começar a responder às solicitações novamente, mesmo que eu reinicie o servidor.

Parece que isso está relacionado

E isso também parece estar relacionado

Mudei meu script de nó que estava atuando como um cliente, bem como o servidor, para uma máquina virtual Linux e, a partir daí, parece que funciona bem. Posso fazer inúmeras solicitações e isso não acontecerá, confirmando que se trata de um problema do Windows.

Eu também testei rodando o servidor na caixa virtual do Linux e tendo o cliente rodando na minha máquina host, e parecia funcionar sem parar em 16.000.

Em resumo, para qualquer outra pessoa que encontre esse problema por meio do Google, é o Windows. Você precisará executar seu servidor a partir de uma máquina Linux. Se você estiver testando um servidor em execução localmente, recomendo usar o Vagrant para criar uma máquina Linux e executar o servidor a partir dela.

Provavelmente, isso ocorre porque o Windows está ficando sem portas efêmeras.

Para corrigir, defina MaxUserPort para algo como 65000 abaixo de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters

Fonte: https://docs.oracle.com/cd/E26180_01/Search.94/ATGSearchAdmin/html/s1207adjustingtcpsettingsforheavyload01.html

Acho que outra opção é a biblioteca assíncrona, onde você pode selecionar para aguardar a solicitação.
async.eachLimit(collection,limit,function(item, callback){},function(errHandler(err)){})

Esta página foi útil?
0 / 5 - 0 avaliações