Erro de teste do Apache Bench no OS X: “apr_socket_recv: Redefinição de conexão pelo ponto (54)”

55

Atualizei meu MacBook Pro 13 "para Lion há algumas semanas. Acabei de descobrir que o Apache Bench (apache2.2.19) não está funcionando. Ele sempre mostra esse erro, não importa o que:

apr_socket_recv: Redefinição de conexão por ponto (54)

Também fiz uma instalação limpa no meu Mac Mini e produziu o mesmo erro.

Como posso consertar isso?

ben
fonte
Eu também estou obtendo esses dados. Eu os obtenho enquanto testo um pequeno servidor Web Go e com um servidor Python Gevent.
Justin

Respostas:

65

Observe que, se você usar o -rApache Bench, ele não sairá por erros.

A partir da documentação :

-r
Não saia no soquete e receba erros.

Milhas
fonte
11
Deveria, exceto que está errado. Eu apenas tentei correr: ab -n 200 -c 20 -r http://localhoste tem (Deus me livre um comentário tem novas linhas!) Test aborted after 10 failures apr_socket_connect(): Operation already in progress (37) Total of 4 requests completed
umassthrower
3
infelizmente ainda
existe
Trabalhou para mim no OS X 10.9
Willem
47

Isso ocorre devido a um bug no software Apache que acompanha o Lion. Uma versão mais recente do Apache (beta) corrige o problema. Para corrigir ab, aqui estão as etapas:

  1. Baixe a versão mais recente do Apache

    $ wget http://apache.mirrors.pair.com//httpd/httpd-2.3.16-beta.tar.bz2
    

Se o 2.3.16 não estiver disponível, acesse http://apache.mirrors.pair.com/httpd e obtenha as informações mais recentes.

  1. Instale o pcre (você precisa preparar isso)

    $ brew install pcre
    
  2. Build Apache

    $ tar xzvf httpd-2.3.16-beta.tar.bz2
    $ cd httpd-2.3.16-beta
    $ ./configure
    $ make
    
  3. Substitua o ab existente pelo recém-construído

    $ sudo cp support/ab /usr/sbin
    
andy318
fonte
quando eu makeobtenho: Símbolos indefinidos: "_apr_file_link", referenciados em: _post_rotate em rotatelogs.o ld: símbolo (s) não encontrado (s) collect2: ld retornou 1 status de saída make [2]: *** [rotatelogs] Erro 1 make [1]: *** [all-recursive] Erro 1 make: *** [all-recursive] erro 1 Alguma dica de como resolver isso?
Jonathan
Isso ainda é um problema no OSX 10.8.2?
Chris Wagner
3
Estou comparando um aplicativo node.js helloworld. No começo eu estava recebendo um Connection reset by peer (54)para qualquer abbenchmarking. Depois de fazer a correção acima, eu poderia fazer ab -n 100 -c 100. Então eu poderia fazer ab -n 200 -c 100. Eu poderia fazer ab -n 200 -c 150... Quando eu tomo -cacima -c 200, às vezes ele é executado e, às vezes, gera um Connection Reset by Peer (54)erro. Está sendo não determinista. O que fazer?
Rakib
3
Ao executar ./configure, dê uma olhada nesta postagem se você encontrar configure: error: C compiler cannot create executables: stackoverflow.com/a/11712497/599391
Chiubaka
5

Usar o método de atualização de ab através do homebrew neste link funcionou para mim.

brew install 'https://raw.github.com/simonair/homebrew-dupes/e5177ef4fc82ae5246842e5a544124722c9e975b/ab.rb'
brew test ab
mamãe
fonte
2
Bem-vindo ao Super Usuário! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
slhck
Estou recebendo:Error: Download failed: http://www.apache.org/dist/httpd/httpd-2.4.2.tar.bz2
Benjamin Crouzier 27/07/2013
@pinouchon embora o script agora está mais sendo mantido pelo autor, aqui está um link novo, trabalhando: raw.githubusercontent.com/simonair/homebrew-dupes/... (tipo:brew install "https://raw.githubusercontent.com/simonair/homebrew-dupes/e26f111d450d1a030515e1dde4e1dc4693efa78d/ab.rb")
Matt3o12
Erro: ab: undefined method `sha1' para Formulary :: FormulaNamespacebc6d3f6af42f9cfa51e2e726dcc9ff30 :: Ab: Classe @ Matt3o12
Mark Ramotowski
4

Você tentou usar: em 127.0.0.1vez de localhost?

Também meu ab falhará se eu não escrever url com http://na frente.


fonte
2

Eu tive o mesmo erro com o Mountain Lion ab v2.3 e estava quase pronto para instalar o brew e a versão mais recente do ab, conforme instruído por uma das respostas acima. Antes de finalmente seguir esse caminho, tentei apenas adicionar a barra final .

user$ ab http://dl.cubrid.org
ab: invalid URL
Usage: ab [options] [http[s]://]hostname[:port]/path

Na mensagem acima, preste atenção ao formato necessário do URL de entrada. Os componentes opcionais estão marcados com colchetes, mas observe que a parte / path parece não ser opcional. Portanto, presumi que, se estiver testando o domínio raiz, devo adicionar pelo menos a barra final , o que realmente fez o truque! Espero que isso ajude você também.

user$ ab dl.cubrid.org/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking dl.cubrid.org (be patient).....done


Server Software:        
Server Hostname:        dl.cubrid.org
Server Port:            80

Document Path:          /
Document Length:        13437 bytes

Concurrency Level:      1
Time taken for tests:   0.863 seconds
Complete requests:      1
Failed requests:        0
Write errors:           0
Total transferred:      13606 bytes
HTML transferred:       13437 bytes
Requests per second:    1.16 [#/sec] (mean)
Time per request:       862.778 [ms] (mean)
Time per request:       862.778 [ms] (mean, across all concurrent requests)
Transfer rate:          15.40 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      207  207   0.0    207     207
Processing:   655  655   0.0    655     655
Waiting:      234  234   0.0    234     234
Total:        862  862   0.0    862     862
Olho
fonte
0

Algumas coisas para testar:

  • você pode tentar desativar o firewall vendo se isso funciona?
  • habilite o compartilhamento na web e teste o host local / (verifique se ele funciona primeiro em um navegador)

Se nenhum desses trabalhos puder abrir um terminal e

$ sudo opensnoop

em seguida, execute o banco apache e publique a saída do terminal opensnoop na pergunta. Se nada disso funcionar, você pode tentar instalar macports e instalar o apache a partir daí e ver se isso funciona como uma solução alternativa (meio que manca).

O My Air está em alta, mas a versão do apache é diferente (houve uma atualização recentemente, você já a instalou?). Consegui verificar se ab funciona para mim:

$ ab -V
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
$ uname -a
Darwin air.local 11.1.0 Darwin Kernel Version 11.1.0: Tue Jul 26 16:07:11 PDT 2011; root:xnu-1699.22.81~1/RELEASE_X86_64 x86_64
$ ab google.com/ 
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking google.com (be patient).....done


Server Software:        gws
Server Hostname:        google.com
Server Port:            80

Document Path:          /
Document Length:        219 bytes

Concurrency Level:      1
Time taken for tests:   4.130 seconds
Complete requests:      1
Failed requests:        0
Write errors:           0
Non-2xx responses:      1
Total transferred:      511 bytes
HTML transferred:       219 bytes
Requests per second:    0.24 [#/sec] (mean)
Time per request:       4130.343 [ms] (mean)
Time per request:       4130.343 [ms] (mean, across all concurrent requests)
Transfer rate:          0.12 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:     4119 4119   0.0   4119    4119
Processing:    11   11   0.0     11      11
Waiting:       11   11   0.0     11      11
Total:       4130 4130   0.0   4130    4130
polinomial
fonte
Obrigado pela @polynomial resposta :) ab google.com/funciona para mim também, tentarab -n 1000 -c 1000 google.com/
ben
@ Ben Lembro-me de ter um problema semelhante, e lembro-me de resolver resolvido adicionando http: //? Estou na máquina windows agora, irá verificar quando eu chegar em casa.