Cada vez que uso 'ab' para comparar un servidor web, se congelará por un tiempo después de haber enviado muchas solicitudes, solo para continuar después de 20 segundos más o menos.programa 'ab' se congela después de muchas solicitudes, ¿por qué?
Considérese el siguiente simulador de servidor HTTP, escrita en Ruby:
require 'socket'
RESPONSE = "HTTP/1.1 200 OK\r\n" +
"Connection: close\r\n" +
"\r\n" +
"\r\n"
buffer = ""
server = TCPServer.new("127.0.0.1", 3000) # Create TCP server at port 3000.
server.listen(1024) # Set backlog to 1024.
while true
client = server.accept # Accept new client.
client.write(RESPONSE) # Write a stock "HTTP" response.
client.close_write # Shutdown write part of the socket.
client.read(nil, buffer) # Read all data from the socket.
client.close # Close it.
end
entonces corro ab de la siguiente manera:
ab -n 45000 -c 10 http://127.0.0.1:3000/
Durante los primeros segundos, ab hace su trabajo como se supone que debe y utiliza 100% de CPU:
Benchmarking 127.0.0.1 (be patient)
Completed 4500 requests
Completed 9000 requests
Completed 13500 requests
Después de aproximadamente 13500 solicitudes, el uso de la CPU del sistema cae t o 0%. ab parece estar congelado en algo. El problema no está en el servidor porque en este momento, el servidor está llamando a accept(). Después de unos 20 segundos ab continúa como si nada hubiera sucedido, y usará 100% de CPU nuevamente, solo para congelar nuevamente después de varios segundos.
Sospecho que algo en el kernel está limitando las conexiones, pero ¿qué y por qué? Estoy usando OS X Leopard. También he visto un comportamiento similar en Linux, aunque la congelación ocurre en un número mucho mayor de solicitudes y no ocurre con tanta frecuencia.
Este problema me impide ejecutar pruebas de referencia HTTP de gran tamaño.
Sí, eso es todo. Cambié el MSL siguiendo las instrucciones en http://www.brianp.net/2008/10/03/change-the-length-of-the-time_wait-state-on-mac-os-x/ y todo funciona ahora. ¡Gracias! – Hongli
Muchas gracias, esto solucionó el mismo problema que estaba teniendo. –
Aquí estaba pensando que era un problema 'Golang' .. cuando se congeló cada 16000 solicitudes de' ab' – kouton