【发布时间】:2016-10-27 17:48:34
【问题描述】:
我继承了具有以下结构的旧版应用程序:
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 外部获取数据,即:从 main 吗?我认为这是可取的。
另一个问题是我无法修改生产代码。我可以访问测试环境,但无法复制实时流量。是否可以在不修改生产代码的情况下安全地附加到正在运行的 gunicorn 进程并对其进行分析?
非常感谢任何提示或见解。
gunicorn v18.0、gevent v1.0.1、金字塔 1.4.5、python 2.7.6 在 Ubuntu 12 x64 上运行
【问题讨论】:
-
Try this. 它不会花费您任何费用。实际上有很多 mathematical justification 在它后面,如果有帮助的话。
标签: python profiling gunicorn gevent