【问题标题】:Profiling options for gunicorn / Pyramid app?gunicorn / Pyramid 应用程序的分析选项?
【发布时间】: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 上运行

【问题讨论】:

标签: python profiling gunicorn gevent


【解决方案1】:

尝试使用 app enlight 中间件找出瓶颈: https://getappenlight.com/page/api/main.html

你可以装饰一些函数来分别计时。

【讨论】:

  • 感谢尔格。我发布这个问题的原因之一是我不确定金字塔 gunicorn ands 和金字塔从哪里开始。 ohmygod() 函数在金字塔内部吗?
  • ohmygod() 可以被视为金字塔应用程序的一部分,如果您从金字塔 wsgi 应用程序生成一个单独的 greenlet - 您的示例目前不包含与金字塔相关的任何内容 - 如果没有更具体的示例,很难猜测。一般来说,gunicorn 只是一个 WSGI 服务器,您的业务逻辑包裹在金字塔应用程序中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2013-04-09
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多