是否有一种生产安全的方法来测量使用 Python 在生产中花费的时间?
Posted
技术标签:
【中文标题】是否有一种生产安全的方法来测量使用 Python 在生产中花费的时间?【英文标题】:Is there a production-safe way to measure time spent in Production w/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 这样的包?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于是否有一种生产安全的方法来测量使用 Python 在生产中花费的时间?的主要内容,如果未能解决你的问题,请参考以下文章
有一种方法可以分析 cad 模型文件(每个示例 .stl)以获取他的测量值?
在 Python 中,是不是有一种方便的方法来重载 C++ 中的方法? [复制]