diff options
Diffstat (limited to 'synapse/app/homeserver.py')
-rwxr-xr-x | synapse/app/homeserver.py | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py index f3513abb55..beb9366268 100755 --- a/synapse/app/homeserver.py +++ b/synapse/app/homeserver.py @@ -516,26 +516,36 @@ class SynapseSite(Site): def run(hs): - PROFILE_SYNAPSE = False + PROFILE_SYNAPSE = True if PROFILE_SYNAPSE: def profile(func): from cProfile import Profile from threading import current_thread + from theseus import Tracer + def profiled(*args, **kargs): - profile = Profile() - profile.enable() - func(*args, **kargs) - profile.disable() - ident = current_thread().ident - profile.dump_stats("/tmp/%s.%s.%i.pstat" % ( - hs.hostname, func.__name__, ident - )) + try: + t = Tracer() + t.install() + + func(*args, **kargs) + + ident = current_thread().ident + name = "/tmp/%s.%s.%i.callgrind" % ( + hs.hostname, func.__name__, ident + ) + + with open(name, 'wb') as outfile: + t.write_data(outfile) + except: + logger.exception("WIBBLE") + raise return profiled - from twisted.python.threadpool import ThreadPool - ThreadPool._worker = profile(ThreadPool._worker) + # from twisted.python.threadpool import ThreadPool + # ThreadPool._worker = profile(ThreadPool._worker) reactor.run = profile(reactor.run) def in_thread(): |