2011-04-01 32 views
1

我想在現實世界的Trac/mod_python安裝中啓用一個側面日誌記錄,該安裝已經變得非常緩慢(大量插件,而不是很多票據/頁面)。mod_python Trac實例的性能分析

我可以代理請求對象,或添加蟒蛇跟蹤(時間戳爲每個呼叫)不知何故?這種類型的包裝有沒有機制?

中的Trac/mod_python的主要切入點是

def handler(req): 
    pkg_resources.require('Trac==%s' % VERSION) 
    gateway = ModPythonGateway(req, req.get_options()) 
    from trac.web.main import dispatch_request 
    gateway.run(dispatch_request) 
    return apache.OK 

而且我想我應該裝的包裝,可以通過跟蹤時序分析所有插件蟒蛇電話。可能?

回答

3

使用cProfile模塊,這樣的事情應該工作:

def handler(req): 
    pkg_resources.require('Trac==%s' % VERSION) 
    gateway = ModPythonGateway(req, req.get_options()) 

    from trac.web.main import dispatch_request 
    import cProfile 
    from datetime import datetime 

    def profile_request(*args, **kwargs): 
     p = cProfile.Profile() 
     p.runcall(dispatch_request, *args, **kwargs) 
     # log to a file 
     timestamp = datetime.now().strftime('%Y-%m-%d_%H%M%S.%f') 
     p.dump_stats('/var/log/trac_profile/%s' % timestamp) 

    gateway.run(profile_request) 
    return apache.OK 

然後每個請求應該嚴密和分析數據(圖什麼佔用時間)保存在指定的位置,每個請求一個時間戳的文件。當然,正在運行的進程必須具有文件的寫入權限。

您可以更改源文件。

+0

這就是我想盡快嘗試。看起來很完美。我會回到這裏,讓你知道結果。 – towi 2011-04-02 10:37:16

+0

完美的作品!我使用'strftime('%Y%m%d_%H%M%S.%s')' – towi 2011-05-11 13:14:17

2

您可能想要查看this page,其中描述了一個人識別和解決Trac性能問題的技巧。當我的Trac實例開始變得呆滯時,我從那裏解釋的技術借用。

Trac wiki上的TracPerformance頁面提供了許多關於提高性能的良好指針。

還有一些有用的提示和鏈接發佈到this serverfault question