From e367b8819569a7811d2625a2b59610b508e8175c Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 16:40:21 +1200 Subject: Add a --sysinfo flag to all daemons This dumps all the platform information and mitmproxy version data we'd normally need to troubleshoot an issue. --- netlib/debug.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 netlib/debug.py (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py new file mode 100644 index 00000000..ca25b828 --- /dev/null +++ b/netlib/debug.py @@ -0,0 +1,26 @@ +import platform +from netlib import version + +""" + Some utilities to help with debugging. +""" + +def sysinfo(): + data = [ + "Mitmproxy verison: %s"%version.VERSION, + "Python version: %s"%platform.python_version(), + "Platform: %s"%platform.platform(), + ] + d = platform.linux_distribution() + if d[0]: + data.append("Linux distro: %s %s %s"%d) + + d = platform.mac_ver() + if d[0]: + data.append("Mac version: %s %s %s"%d) + + d = platform.win32_ver() + if d[0]: + data.append("Windows version: %s %s %s %s"%d) + + return "\n".join(data) -- cgit v1.2.3 From 5b9f07c81c0dcc8c7b3d7afdeae8f6229ebf8622 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 17:56:17 +1200 Subject: debug.sysinfo: tests and coverage --- netlib/debug.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py index ca25b828..bf446eb0 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -12,15 +12,18 @@ def sysinfo(): "Platform: %s"%platform.platform(), ] d = platform.linux_distribution() - if d[0]: - data.append("Linux distro: %s %s %s"%d) + t = "Linux distro: %s %s %s"%d + if d[0]: # pragma: no-cover + data.append(t) d = platform.mac_ver() - if d[0]: - data.append("Mac version: %s %s %s"%d) + t = "Mac version: %s %s %s"%d + if d[0]: # pragma: no-cover + data.append(t) d = platform.win32_ver() - if d[0]: - data.append("Windows version: %s %s %s %s"%d) + t = "Windows version: %s %s %s %s"%d + if d[0]: # pragma: no-cover + data.append(t) return "\n".join(data) -- cgit v1.2.3 From 09edbd9492e59c0c8dcae69b4b1f4b745867abe4 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 19:52:24 +1200 Subject: Improve debugging of thread and other leaks - Add basethread.BaseThread that all threads outside of test suites should use - Add a signal handler to mitmproxy, mitmdump and mitmweb that dumps resource information to screen when SIGUSR1 is received. - Improve thread naming throughout to make thread dumps understandable --- netlib/debug.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 12 deletions(-) (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py index bf446eb0..b48cb122 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -1,29 +1,76 @@ +from __future__ import (absolute_import, print_function, division) + +import sys +import threading +import signal import platform + +import psutil + from netlib import version -""" - Some utilities to help with debugging. -""" def sysinfo(): data = [ - "Mitmproxy verison: %s"%version.VERSION, - "Python version: %s"%platform.python_version(), - "Platform: %s"%platform.platform(), + "Mitmproxy verison: %s" % version.VERSION, + "Python version: %s" % platform.python_version(), + "Platform: %s" % platform.platform(), ] d = platform.linux_distribution() - t = "Linux distro: %s %s %s"%d - if d[0]: # pragma: no-cover + t = "Linux distro: %s %s %s" % d + if d[0]: # pragma: no-cover data.append(t) d = platform.mac_ver() - t = "Mac version: %s %s %s"%d - if d[0]: # pragma: no-cover + t = "Mac version: %s %s %s" % d + if d[0]: # pragma: no-cover data.append(t) d = platform.win32_ver() - t = "Windows version: %s %s %s %s"%d - if d[0]: # pragma: no-cover + t = "Windows version: %s %s %s %s" % d + if d[0]: # pragma: no-cover data.append(t) return "\n".join(data) + + +def dump_info(sig, frm, file=sys.stdout): # pragma: no cover + p = psutil.Process() + + print("****************************************************", file=file) + print("Summary", file=file) + print("=======", file=file) + print("num threads: ", p.num_threads(), file=file) + print("num fds: ", p.num_fds(), file=file) + print("memory: ", p.memory_info(), file=file) + + print(file=file) + print("Threads", file=file) + print("=======", file=file) + bthreads = [] + for i in threading.enumerate(): + if hasattr(i, "_threadinfo"): + bthreads.append(i) + else: + print(i.name, file=file) + bthreads.sort(key=lambda x: x._thread_started) + for i in bthreads: + print(i._threadinfo(), file=file) + + print(file=file) + print("Files", file=file) + print("=====", file=file) + for i in p.open_files(): + print(i, file=file) + + print(file=file) + print("Connections", file=file) + print("===========", file=file) + for i in p.connections(): + print(i, file=file) + + print("****************************************************", file=file) + + +def register_info_dumper(): # pragma: no cover + signal.signal(signal.SIGUSR1, dump_info) -- cgit v1.2.3 From 3f240b18750de1c70f3aaaf100ecf645ff6e3441 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 21:04:13 +1200 Subject: debug: verison -> version @resam blew our sponsorship - t-mobile is up next --- netlib/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py index b48cb122..578de8e1 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -12,7 +12,7 @@ from netlib import version def sysinfo(): data = [ - "Mitmproxy verison: %s" % version.VERSION, + "Mitmproxy version: %s" % version.VERSION, "Python version: %s" % platform.python_version(), "Platform: %s" % platform.platform(), ] -- cgit v1.2.3 From 0848d1085e28dd9f31ba0dddf042edc8c5955488 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 21:06:41 +1200 Subject: debug: add OpenSSL --- netlib/debug.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py index 578de8e1..08ab2a44 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -9,12 +9,15 @@ import psutil from netlib import version +from OpenSSL import SSL; + def sysinfo(): data = [ "Mitmproxy version: %s" % version.VERSION, "Python version: %s" % platform.python_version(), "Platform: %s" % platform.platform(), + "SSL version: %s" % SSL.SSLeay_version(SSL.SSLEAY_VERSION), ] d = platform.linux_distribution() t = "Linux distro: %s %s %s" % d -- cgit v1.2.3 From 5566a1f0e68659c44e5dc03a1321cfb738c031c5 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 21:25:34 +1200 Subject: debug: num_fds is posix-only --- netlib/debug.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py index 08ab2a44..8292d8d2 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -44,7 +44,8 @@ def dump_info(sig, frm, file=sys.stdout): # pragma: no cover print("Summary", file=file) print("=======", file=file) print("num threads: ", p.num_threads(), file=file) - print("num fds: ", p.num_fds(), file=file) + if hasattr(p, "num_fds"): + print("num fds: ", p.num_fds(), file=file) print("memory: ", p.memory_info(), file=file) print(file=file) -- cgit v1.2.3 From 53b2fd545b104051e0697c590cf7df5c37074170 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 11 Jun 2016 21:26:38 +1200 Subject: Zap stray semicolon --- netlib/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'netlib/debug.py') diff --git a/netlib/debug.py b/netlib/debug.py index 8292d8d2..6f6b0460 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -9,7 +9,7 @@ import psutil from netlib import version -from OpenSSL import SSL; +from OpenSSL import SSL def sysinfo(): -- cgit v1.2.3