Powiel możliwe:
'ab' program freezes after lots of requests, why?Dlaczego prosty serwer Thin przestaje odpowiadać przy 16500 zapytaniach podczas testów porównawczych?
Oto prosty serwer testowy:
require 'rubygems'
require 'rack'
require 'thin'
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, "OK"]
end
end
Rack::Handler::Thin.run HelloWorld.new, :Port => 9294
#I've tried with these added too, 'rack.multithread' => true, 'rack.multiprocess' => true
Oto przebieg testu:
$ ab -n 20000 http://0.0.0.0:9294/sdf
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 0.0.0.0 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
apr_poll: The timeout specified has expired (70007)
Total of 16347 requests completed
Rozkłada się na około 16500. Dlaczego? Jak mogę się dowiedzieć, co się dzieje. Czy jest to GC w Ruby, czy jest to coś z wieloma dostępnymi gniazdami sieciowymi na maszynie OS X? Mam pamięć MPB 2,5 Ghz 6G.
Edit
Po krótkiej dyskusji tutaj i testowania różnych rzeczy, wydaje się, zmieniając net.inet.tcp.msl od 15000 do 1000ms sprawia problemu wysokiej częstotliwości testowania serwerów internetowych z ab odejść.
sudo sysctl -w net.inet.tcp.msl=1000 # this is only good for local development
Zobacz pytanie z odpowiedzią na ten problem. 'ab' program freezes after lots of requests, why?
Znalazłeś przyczynę ?? Potencjalnym wyjaśnieniem może być to, że system operacyjny zachowuje gniazdo w stanie "ostatnio używanym" i nie używa go ponownie przez kilka minut. Wygląda na to, że można zrekonfigurować warstwę IP systemu operacyjnego, aby tego nie robić. – radiospiel
Jeśli to pomaga, mogę odtworzyć to dokładne zachowanie na moim MBP. 16359 zapytań zakończonych. Nie mam pojęcia, co to powoduje. –
Hmm, myślę głośno, ta liczba jest podejrzanie bliska 16384 ... –