2010/9/23 Roberto De Ioris <[email protected]>: > > Il giorno 23/set/2010, alle ore 16.07, Jean-Baptiste Quenot ha scritto:
>> If I had >> connection bursts so that the delay between connect() and accept() >> would get longer, my server would have very slow average response >> times, but this is not the case, the average response time is 400ms 24 >> hours a day, and I don't have a lot of concurrent connections (about >> 15 in average). > > average ? the rate of bad response (empty) is so little that i really have > doubt > that it can be accounted in the average. You have little times when the > workers are overloaded, > no one can respond in a reasonable time. I meant average for all requests. All response times are monitored there is no overload at all anytime. > The matter is all on how uWSGI and flup manages workers, if you want to have > a similar result > of Flup, spawn 50 workers > > http://trac.saddi.com/flup/browser/flup/server/preforkserver.py FYI I used the threading model with Flup and it is limited to sys.maxint: See http://trac.saddi.com/flup/browser/flup/server/threadedserver.py and http://trac.saddi.com/flup/browser/flup/server/threadpool.py Now, let's assume I have an overloaded backend, either because application is too slow, or because there are too many connections. I made a test with haproxy timeout set to 10s and uwsgi harakiri at 9s. In the first test, application does this: if uri == "/": self.startResponse("200 OK") time.sleep(11) return "" I run uwsgi with only one worker: /usr/bin/uwsgi -b 25000 -s 127.0.0.1:25555 -t 9 -A1 -M -p1 -C -i -w server --pythonpath core -L I access haproxy with ab -c1 -n1 and get this in nginx logs: Sep 23 17:54:24 placardo nginx: 127.0.0.1 - 0 10.011 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "fr.nomao.com" Upstream response time is not indicated, and status code is 499 (client abort), not 200. Now I change application to have a "normal" response time: if uri == "/": self.startResponse("200 OK") time.sleep(.4) return "" I raise the concurrency of requests with ab -c100 -n100, here is what I have: Sep 23 18:03:29 placardo nginx: 127.0.0.1 - 153 0.401 0.401 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:30 placardo nginx: 127.0.0.1 - 153 0.802 0.802 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:30 placardo nginx: 127.0.0.1 - 153 1.203 1.203 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:31 placardo nginx: 127.0.0.1 - 153 1.604 1.604 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:31 placardo nginx: 127.0.0.1 - 153 2.004 2.004 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:31 placardo nginx: 127.0.0.1 - 153 2.405 2.405 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:32 placardo nginx: 127.0.0.1 - 153 2.806 2.806 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:32 placardo nginx: 127.0.0.1 - 153 3.207 3.207 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:33 placardo nginx: 127.0.0.1 - 153 3.607 3.607 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:33 placardo nginx: 127.0.0.1 - 153 4.009 4.009 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:33 placardo nginx: 127.0.0.1 - 153 4.409 4.409 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:34 placardo nginx: 127.0.0.1 - 153 4.810 4.810 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:34 placardo nginx: 127.0.0.1 - 153 5.211 5.211 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:35 placardo nginx: 127.0.0.1 - 153 5.612 5.612 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:35 placardo nginx: 127.0.0.1 - 153 6.013 6.013 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:35 placardo nginx: 127.0.0.1 - 153 6.414 6.414 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:36 placardo nginx: 127.0.0.1 - 153 6.814 6.814 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:36 placardo nginx: 127.0.0.1 - 153 7.214 7.214 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:37 placardo nginx: 127.0.0.1 - 153 7.615 7.615 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:37 placardo nginx: 127.0.0.1 - 153 8.016 8.016 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:37 placardo nginx: 127.0.0.1 - 153 8.417 8.417 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:38 placardo nginx: 127.0.0.1 - 153 8.818 8.818 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:38 placardo nginx: 127.0.0.1 - 153 9.219 9.219 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 153 9.620 9.620 "GET / HTTP/1.0" 200 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 10.014 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 10.013 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 10.013 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Sep 23 18:03:39 placardo nginx: 127.0.0.1 - 0 9.977 - "GET / HTTP/1.0" 499 0 "-" "ApacheBench/2.3" "-" "-" Again, only 499 status code and no upstream server time when timeout is reached. To be safe I also tried the same tests with curl and HTTP/1.1, the results are the same. This is really different from what happens with empty responses in production, where we have upstream response time printed, and the right application status code, so I don't believe in the overloaded or slow backend explanation. -- Jean-Baptiste Quenot _______________________________________________ uWSGI mailing list [email protected] http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
