Memory leaks 使用tornado作为代理,内存泄漏,don';我不知道为什么?

Memory leaks 使用tornado作为代理,内存泄漏,don';我不知道为什么?,memory-leaks,proxy,tornado,Memory Leaks,Proxy,Tornado,我想使用tornado作为代理服务器。事情很简单: 1.接收某个客户的请求 2.从请求中获取url、参数和标题 3.使用代理对第2部分中的内容进行请求 4.将响应内容、标题和代理返回给客户端 代码如下: # -*- coding: utf-8 -*- import json import functools import base64 import sys from tornado.httpserver import HTTPServer from tornado.ioloop import

我想使用tornado作为代理服务器。事情很简单: 1.接收某个客户的请求 2.从请求中获取url、参数和标题 3.使用代理对第2部分中的内容进行请求 4.将响应内容、标题和代理返回给客户端 代码如下:

# -*- coding: utf-8 -*-
import json
import functools
import base64
import sys

from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.httpclient import AsyncHTTPClient
import tornado.web

import util


AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")

class MainHandler(tornado.web.RequestHandler):


    def handle_response(self, proxy, response):
        if response.error:
            self.write("error")
        else:
            headers = {name.lower(): value for name, value in response.headers.get_all()}
            result = {
                "content": base64.b64encode(response.body),
                "headers": headers,
                "proxy": proxy,
                }
            self.write(json.dumps(result))
        self.finish()


    @tornado.web.asynchronous
    def post(self):
        url = self.get_argument("url", "")
        body = self.get_argument("body", "")
        headers = json.loads(self.get_argument("headers", ""))
        method = self.get_argument("method", "GET")
        proxy = self.get_argument("proxy", "")
        client = AsyncHTTPClient()
        if proxy == "":
            proxy = util.get_random_ip() # get a proxy string, like '118.150.101.160:18088'
        proxy_info = proxy.split(":")
        request_info = {
            "method": method,
            "headers": headers,
            "connect_timeout": 2,
            "request_timeout": 5,
            "proxy_host": proxy_info[0],
            "proxy_port": int(proxy_info[1]),
            }
        cf = functools.partial(self.handle_response, proxy)
        if method == "POST":
            request_info["body"] = body
        client.fetch(url, callback=cf, **request_info)



if __name__ == "__main__":
    port = sys.argv[1]
    print "start at port : ", port
    application = tornado.web.Application([(r"/proxy", MainHandler)])
    server = HTTPServer(application)
    server.listen(int(port))
    IOLoop.instance().start()
当请求增长到大约每分钟300次(5/s不太高)时,内存开始出错。我用“扫视”来检查系统信息,一开始,使用的内存是16.6M,但3分钟后,内存增加到107.8M,10分钟后,数字可能会达到8518.6M,这太可怕了

我不知道为什么,有什么帮助吗