我在生产环境中寻找一个统计性能度量的工具。
我想知道Python解释器大部分时间都在做什么。换句话说,我想探测热点。
我想观察几个小时的生产环境。
稍后,我想总结一下解释器花费的时间最多的地方。
所需特征:
发布于 2018-03-13 15:33:53
PyFlame看起来不错:https://github.com/uber/pyflame
从医生那里:
Python的Ptracing是一个高性能的分析工具,它为Python生成火焰图。Py焰是在C++中实现的,它使用Linux (2)系统调用来收集分析信息。它可以在没有显式插装的情况下获取Python调用堆栈的快照,这意味着您可以在不修改其源代码的情况下对程序进行分析。Pyflame能够分析嵌入式Python解释器,如uWSGI。它完全支持分析多线程Python程序。Pyflame通常比内置配置文件(或cProfile)模块引入的开销要小得多,并且会释放更丰富的分析数据。分析开销足够低,您可以使用它来分析生产中的活动过程。
发布于 2017-08-14 07:48:21
此工具可能会有所帮助:https://github.com/guettli/live-trace
live-trace是一个Python库,它以每秒N次的速度在守护进程线程中记录正在运行的应用程序的堆栈跟踪。可以对日志文件进行分析,以查看解释器大部分时间花费在哪里。它被称为“实时跟踪”,因为它可以在生产系统上使用,而不会对性能产生明显的影响。
如果您想了解特定请求为什么慢,请使用分析器,而不是实时跟踪。
如果你想看鸟瞰的话,可以使用实时跟踪。如果你问自己这个问题:
翻译整天在做什么?
然后在生产环境中使用实时跟踪。让它收集大量解释器状态的管理主机。当前实现使用堆栈跟踪来冻结解释器的状态。运行几个小时后,您可以聚合收集到的堆栈跟踪并识别热点。
上
我写了这个工具“实时跟踪”,并问这里是否有这样的工具。
我这样做了,因为我对当前的实时跟踪的实现不太满意。如果解释器在c++扩展中执行了大量代码,那么结果是不可靠的。如果主线程位于c扩展中,守护进程线程无法记录堆栈跟踪(除了GIL的发布,如这里所解释的线程状态和吉尔)。
解决这个问题的方法是第二个通过gdb收集堆栈跟踪的过程。或者更好的解决办法我至今还没有找到..。
https://softwarerecs.stackexchange.com/questions/44914
复制相似问题