Ho un paio di server HTTP incredibilmente di base e tutti presentano questo problemaPerché il mio server Hello World go viene schiacciato da ApacheBench?
$ ab -c 1000 -n 10000 http://127.0.0.1:8000/
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
apr_socket_recv: Connection refused (61)
Total of 5112 requests completed
Con un valore di concorrenza minore, le cose continuano a cadere. Per me, il problema sembra presentarsi intorno al marchio 5k-6K solito:
$ ab -c 10 -n 10000 http://127.0.0.1:8000/
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
apr_socket_recv: Operation timed out (60)
Total of 6277 requests completed
E infatti, è possibile eliminare la concorrenza del tutto e il problema ancora (a volte) accade:
$ ab -c 1 -n 10000 http://127.0.0.1:8000/
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
apr_socket_recv: Operation timed out (60)
Total of 6278 requests completed
I non posso fare a meno di chiedermi se sto colpendo qualche tipo di limite del sistema operativo da qualche parte? Come lo direi? E come potrei mitigare?
'ab' non è molto buono, e il server Go http lo esegue molto lontano. 'ab' funziona molto male su osx. Stai esaurendo alcune risorse locali, come le prese disponibili. – JimB
Come si avvia il server? Non vedo che tu abbia impostato GOMAXPROCS ovunque. –
Penso che per impostazione predefinita, la connessione del server Go non sia chiusa, quindi può essere riutilizzata, ma sembra che 'ab' non sta riutilizzando né chiudendo abbastanza velocemente in modo che venga raggiunta la connessione massima aperta. Puoi provare a impostare 'r.Close' su' true' nel tuo gestore (non l'ho ancora testato). – siritinga