aboutsummaryrefslogtreecommitdiffstats
path: root/test/helper_tools/memoryleak.py
diff options
context:
space:
mode:
authorThomas Kriechbaumer <Kriechi@users.noreply.github.com>2017-02-15 00:24:05 +0100
committerGitHub <noreply@github.com>2017-02-15 00:24:05 +0100
commitbb2fa6dc7d871d703c6759926521d8c16aae80f1 (patch)
tree63439432d40bd5f0740000b71da0dc6df6053e3c /test/helper_tools/memoryleak.py
parenta3436897ad8c504c08cff40bcddd7915c13a4712 (diff)
parent4d973e82959f5aecab8313b43ce1ab484f21b536 (diff)
downloadmitmproxy-bb2fa6dc7d871d703c6759926521d8c16aae80f1.tar.gz
mitmproxy-bb2fa6dc7d871d703c6759926521d8c16aae80f1.tar.bz2
mitmproxy-bb2fa6dc7d871d703c6759926521d8c16aae80f1.zip
Merge pull request #2026 from Kriechi/filename-matching
add filename-matching linter
Diffstat (limited to 'test/helper_tools/memoryleak.py')
-rw-r--r--test/helper_tools/memoryleak.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/helper_tools/memoryleak.py b/test/helper_tools/memoryleak.py
new file mode 100644
index 00000000..c03230da
--- /dev/null
+++ b/test/helper_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)))