From 9f4e9fcb634a2bc5f14448f1d294b502386b19f3 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 27 May 2015 14:40:21 +0100 Subject: [PATCH] Profile and output long iterations of runUntilConcurrent --- synapse/app/homeserver.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py index f3513abb55..04986fc6ce 100755 --- a/synapse/app/homeserver.py +++ b/synapse/app/homeserver.py @@ -516,27 +516,35 @@ 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 + import time def profiled(*args, **kargs): profile = Profile() + + start = int(time.time()*1000) + profile.enable() func(*args, **kargs) profile.disable() - ident = current_thread().ident - profile.dump_stats("/tmp/%s.%s.%i.pstat" % ( - hs.hostname, func.__name__, ident - )) + + end = int(time.time()*1000) + + if end - start > 100: + ident = current_thread().ident + profile.dump_stats("/tmp/%s.%s.%i.%d-%d.pstat" % ( + hs.hostname, func.__name__, ident, start, end + )) return profiled - from twisted.python.threadpool import ThreadPool - ThreadPool._worker = profile(ThreadPool._worker) - reactor.run = profile(reactor.run) + # from twisted.python.threadpool import ThreadPool + # ThreadPool._worker = profile(ThreadPool._worker) + reactor.runUntilCurrent = profile(reactor.runUntilCurrent) def in_thread(): with LoggingContext("run"):