首页 > 解决方案 > Tornado 在多次连接下载后不会释放内存

问题描述

我在 Tornado 中释放内存时遇到了一些问题。我的处理程序下载部分大字节文件,并将其写入响应。但是并行请求越多,使用的内存就越多(这是合乎逻辑的)。但是请求结束后,内存不是空闲的!

我的代码:

import tornado.ioloop
import tornado.web
import tornado.gen
from tornado.httpclient import AsyncHTTPClient, HTTPRequest


AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient", max_clients=50)


class MainHandler(tornado.web.RequestHandler):

    @tornado.gen.coroutine
    def get(self):
        url = "http://example.com/big_bytes_file"
        request = HTTPRequest(url, headers={'Range': 'bytes=0-1048576'}, method='GET')
        client = AsyncHTTPClient()
        range_resp = yield client.fetch(request)
        self.write(range_resp.body)


def make_app():
    return tornado.web.Application([(r"/", MainHandler), ])


if __name__ == "__main__":
    app = make_app()
    app.listen(5000)
    tornado.ioloop.IOLoop.current().start()

我所做的?

  1. 我看到启动应用程序后的内存使用情况(111 MB): 启动后的内存

  2. 发送一个请求。内存增加(114 MB):114 MB

  3. 发送来自 25 个用户的并行请求。内存 - 123 MB。

  4. 发送来自 50 个用户的并行请求。内存 - 153 MB。

  5. 发送来自 100 个用户的并行请求。内存 - 205 MB。

  6. 等待几分钟。记忆力不减。

这是为什么?:)

PS 举个例子,我们发送来自 80 个用户的请求。在此内存增加之后。之后,只有当用户超过 80 个时,内存才会增加。

标签: pythonasynchronoustornado

解决方案


推荐阅读