[英]Why ApacheBench test on tornado aborts when I add `-k`?
我像這樣啟動龍卷風http服務器:
app = tornado.web.Application([
(r'.*', MyRequestHandler),
])
http_server = tornado.httpserver.HTTPServer(app, no_keep_alive=True)
http_server.listen(port)
ioloop = tornado.ioloop.IOLoop.instance()
ioloop.start()
我想使用標題Connection: keep-alive
來請求請求,然后將no_keep_alive
設置為True
。
當我跑步時
ab -n 1000 -c 10 -k http://127.0.0.1:28000/
輸出
Benchmarking 127.0.0.1 (be patient)
apr_socket_recv: Connection reset by peer (104)
Total of 11 requests completed
當我刪除-k
,一切運行良好。
如果太短-因為apache基准測試會一次打開連接。 在您的情況下,您有10個連接-在前10個請求之后它們全部被殺死。
這是龍卷風對HTTPConnection的完成請求代碼。
def _finish_request(self):
if self.no_keep_alive:
disconnect = True
else:
connection_header = self._request.headers.get("Connection")
if connection_header is not None:
connection_header = connection_header.lower()
if self._request.supports_http_1_1():
disconnect = connection_header == "close"
elif ("Content-Length" in self._request.headers
or self._request.method in ("HEAD", "GET")):
disconnect = connection_header != "keep-alive"
else:
disconnect = True
self._request = None
self._request_finished = False
if disconnect:
self.stream.close()
return
self.stream.read_until(b("\r\n\r\n"), self._header_callback)
您的錯誤:
apr_socket_recv: Connection reset by peer (104)
我們可以猜測,如果舊連接關閉,則必須強制apache基准測試打開新連接。 我不確定在這種情況下您是否能夠獲得代表性的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.