diff options
author | Maximilian Hils <git@maximilianhils.com> | 2015-11-26 23:26:01 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2015-11-26 23:26:01 +0100 |
commit | abd8881491fa5c6eaa12005f784a1c2ec97f6fba (patch) | |
tree | bbb1316acc5aa3c2eaa8a2fa84e33ac97ab726a3 | |
parent | a88004f1ce18130feeb3a3bfcef8215309ab8cd4 (diff) | |
download | mitmproxy-abd8881491fa5c6eaa12005f784a1c2ec97f6fba.tar.gz mitmproxy-abd8881491fa5c6eaa12005f784a1c2ec97f6fba.tar.bz2 mitmproxy-abd8881491fa5c6eaa12005f784a1c2ec97f6fba.zip |
add memoryleak debug script
-rw-r--r-- | test/tools/memoryleak.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/tools/memoryleak.py b/test/tools/memoryleak.py new file mode 100644 index 00000000..47cfff38 --- /dev/null +++ b/test/tools/memoryleak.py @@ -0,0 +1,38 @@ +import gc +import threading +from pympler import muppy, refbrowser +from OpenSSL import SSL +# import os +#os.environ["TK_LIBRARY"] = r"C:\Python27\tcl\tcl8.5" +#os.environ["TCL_LIBRARY"] = r"C:\Python27\tcl\tcl8.5" + +# Also noteworthy: guppy, objgraph + +step = 0 +__memory_locals__ = True + + +def str_fun(obj): + if isinstance(obj, dict): + if "__memory_locals__" in obj: + return "(-locals-)" + if "self" in obj and isinstance(obj["self"], refbrowser.InteractiveBrowser): + return "(-browser-)" + return str(id(obj)) + ": " + str(obj)[:100].replace("\r\n","\\r\\n").replace("\n","\\n") + + +def request(ctx, flow): + global step, ssl + print("==========") + print("GC: {}".format(gc.collect())) + print("Threads: {}".format(threading.active_count())) + + step += 1 + if step == 1: + all_objects = muppy.get_objects() + ssl = muppy.filter(all_objects, SSL.Connection)[0] + if step == 2: + ib = refbrowser.InteractiveBrowser(ssl, 2, str_fun, repeat=False) + del ssl # do this to unpollute view + ib.main(True) + # print("\r\n".join(str(x)[:100] for x in gc.get_referrers(ssl)))
\ No newline at end of file |