簡體   English   中英

當我添加-k時,為什么對龍卷風的ApacheBench測試會中止?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM