【问题标题】:Is there a production-safe way to measure time spent in Production w/Python?是否有一种生产安全的方法来测量使用 Python 在生产中花费的时间?
【发布时间】:2010-11-11 17:56:34
【问题描述】:

我希望能够检测 Python 应用程序以便我知道:

  • 页面生成时间。
  • 花费在外部请求(mysql、api 调用)上的时间百分比。
  • mysql 查询的数量,MySQL 查询的数量。

我想要这些来自生产的数据(不是离线分析)——因为在不同地方花费的时间在负载下会有所不同。

在 PHP 中,我可以使用 XHProf 或 instrumentation-for-php 来做到这一点。在 Ruby on Rails/.NET/Java 中,我可以使用 New Relic 做到这一点。

有没有推荐给 Python 或 django 这样的包?

【问题讨论】:

    标签: python django profiling


    【解决方案1】:

    是的,完全有可能。例如。在 URL 中使用一些魔法开关,例如“?profile-me”,它会触发 Django 中间件中的分析。

    Internet 上有许多 sn-ps,例如:http://djangosnippets.org/snippets/70/ 或类似的模块:http://code.google.com/p/django-profiling/ - 但我没有使用过任何一个,所以我不能推荐任何东西。

    无论如何,他们采用的方法与我所做的类似 - 即在包装您的视图的中间件中使用 Python Hotshot 分析器模块。对于 MySQL 部分,您可以使用 connection.queries form Django。

    Hotshot 的好处是可以使用 Kcachegrind 浏览它的输出,如下所示:http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/

    【讨论】:

    • 我跟随 django-profiling 到 django-logging 项目 - 不再维护 :( 我想要低影响日志 - 我想自动记录大部分请求 - 而不仅仅是我自己的带有 URL 开关的流量。
    • connection.queries 不会工作,除非 DEBUG = True,这不应该在生产环境中完成,因为它将每个查询(以及相关的计时/堆栈跟踪等)存储在内存中。
    【解决方案2】:

    New Relic 现在有一个 Python 包,包括 Django 到 mod_wsgi。

    https://support.newrelic.com/help/kb/python

    【讨论】:

      【解决方案3】:

      django-prometheus 是处理生产工作负载的好选择,尤其是在 Kubernetes 这样的容器环境中。开箱即用,它具有用于跟踪请求延迟和计数(通过视图方法)以及数据库和缓存访问时间的中间件。对于跟踪实际执行的查询来说,这不是一个好的解决方案,但这就是像ELK 这样的日志记录解决方案将发挥作用的地方。如果有帮助,我已经写了一篇文章,其中介绍了 how to add custom metrics to a Django application

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-04
        • 2013-11-10
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 2022-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多