mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-30 03:14:22 +00:00
add memoryleak debug script
This commit is contained in:
parent
a88004f1ce
commit
abd8881491
38
test/tools/memoryleak.py
Normal file
38
test/tools/memoryleak.py
Normal file
@ -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)))
|
Loading…
Reference in New Issue
Block a user