我继承了一个具有以下结构的遗留应用程序:
gunicorn(有64个worker)被启动并指向一个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内部的事件时,我有点不在行。
如果我在该函数中创建了一个cProfiler,它会从事件外部获取数据吗?从主?我认为这是可取的。
另一个问题是我不能修改产品代码。我可以访问测试环境,但我不能复制实时流量。是否有可能在不修改生产代码的情况下安全地附加到正在运行的gunicorn过程并对其进行分析?
任何提示或见解非常感谢。
gunicorn v18.0, gevent v1.0.1, pyramid 1.4.5, python 2.7.6在Ubuntu 12 x64上运行
尝试使用app enlight中间件找出瓶颈:https://getappenlight.com/page/api/main.html