Mein HandlerHTTPS-Anforderung Speicherleck mit CurlAsyncHTTPClient
# -*- coding:utf-8 -*-
import sys
from tornado import gen, web, httpclient
url = "https://mdetail.tmall.com/templates/pages/desc?id=527485572414"
class SearchHandler(web.RequestHandler):
@gen.coroutine
def get(self):
async_client = httpclient.AsyncHTTPClient()
print sys.getrefcount(async_client) # The first time less than 10, then always bigger than 200
req = httpclient.HTTPRequest(url, "GET", headers=headers)
req_lists = [async_client.fetch(req) for _ in range(200)]
r = yield req_lists
print sys.getrefcount(async_client) # always bigger than 200
# The longer req_lists, the more memory will be consumed, and never decrease
configure Datei in broswer
tornado.httpclient.AsyncHTTPClient.configure(client, max_clients=1000)
, wenn mein Kunde ist "tornado.curl_httpclient.CurlAsyncHTTPClient", Dann, wenn ich Sie auf meiner Handler-Datei , htop zeigt Speichererhöhung um 6GB, solange der Prozess läuft, Speicherverbrauch nie sinken
Wenn ich Bereich eingestellt (200) bis Bereich (500) oder höher, wächst Speicherverbrauch höher
wenn mein Cline Keine ist, kaum Speicher
ich die nur holen gefunden erhöhen https: // wird Speicherproblem haben
Wie kann ich das Momory Problem mit CurlAsyncHTTPClient?
Umwelt:
Ubuntu 16.10 x64
python2.7.12
Tornado 4.5.1
Vielen Dank, aber ich verstehe immer noch nicht, warum nur ** "https: //" ** Anfragen viel Speicherplatz verbrauchen mit ** CurlAsyncHTTPClient **, aber ** "http: //" ** Anfragen do not – zpoint
@zpoint Wie ich schon sagte, scheint die hohe Speicherbelegung mit dem TLS-Backend verwandt zu sein, das von libcurl verwendet wird (GnuTLS vs. OpenSSL). Natürlich wird TLS nur für HTTPS verwendet, nicht für HTTP im Klartext. –
Danke, ich werde die neueste Version von libcurl versuchen – zpoint