2016-10-27 21 views
0

我繼承的傳統應用程序結構如下:gunicorn/Pyramid應用程序的性能分析選項?

gunicorn(64個工)開始,並在paste.deploy的應用程序,它看起來像這樣指出:

from paste.deploy import loadapp 
import gevent 
import json 

def ohmygod(): 
    while 1: 
     time.sleep(30) 
     horrible, extremely expensive debugging function() 

gevent.spawn(ohmygod) 

application = loadapp('config:scripts/production.ini', relative_to='/blah') 

這個應用程序的表現是企業至關重要,但我試圖刪除這些代碼需要一些分析證據。

雖然在gunicorn內部調試gevents,但我的聯盟有點不合時宜。

如果我在該函數內部創建了一個cProfiler,它會從gevent外部獲取數據,即:從主?我認爲這將是可取的。

另一個問題是我無法修改生產代碼。我有權訪問測試環境,但我無法複製實時流量。是否可以安全地運行gunicorn進程並在不修改生產代碼的情況下進行配置?

任何提示或見解非常讚賞。

gunicorn v18.0,GEVENT 1.0.1,1.4.5金字塔,蟒蛇2.7.6在Ubuntu 12的x64運行

+0

[*試試這個。*](http://stackoverflow.com/a/4299378/23771)它不會花費任何東西。如果有任何幫助,實際上有很多[*數學理由*](http://scicomp.stackexchange.com/a/2719/1262)。 –

回答

1

嘗試使用應用程序光線中間件找出瓶頸: https://getappenlight.com/page/api/main.html

你可以修飾一些函數來分別計時。

+0

謝謝Ergo。我發佈這個問題的原因之一是我不確定金字塔gunicorn和金字塔在哪裏開始。金字塔內的ohmygod()函數是什麼? –

+1

如果您從金字塔wsgi應用程序中生成單獨的greenlet,則可以將'ohmygod()'視爲金字塔應用程序的一部分 - 您的示例現在不包含與金字塔相關的任何內容 - 不需要更具體的示例就難以猜測。 通常gunicorn只是一個WSGI服務器,您的業務邏輯生活在金字塔應用程序中。 – Ergo

相關問題