监控和调试gevent应用程序#
GEvent应用程序通常是长时间运行的服务器进程。从1.3版开始,gevent对监视此类应用程序和了解它们有特殊的支持。
小技巧
有关其他一些工具,请参见 issue 1021 .
监视器线程#
GEvent可以 configured
启动本机线程来监视它创建的每个集线器。开箱即用,那条线支持看两件事,但你可以 add your own functions
在此线程中定期调用。
舞台调度#
当启用监视线程时,默认情况下,它将监视阻止事件循环超过 configurable
时间间隔。当检测到这样一个阻塞的greenlet时,它将打印 a report
到轮毂的 exception_stream
. 它也会发出 gevent.events.EventLoopBlocked
事件。
内存使用#
或者,您可以设置 memory limit
. 监视线程将每隔 memory_monitor_period
秒,如果发现超过该值, gevent.events.MemoryUsageThresholdExceeded
将发出事件。如果将来内存使用率下降到配置值以下,则 gevent.events.MemoryUsageUnderThreshold
将发出事件。
重要
psutil 必须安装以监视内存使用情况。
能见度#
小技巧
通过观察事件可以了解猴子的修补过程。 gevent.monkey
发射。
有时,获取所有现有greenlet及其堆栈跟踪的概述非常有用。功能 gevent.util.print_run_info()
会收集并打印这个信息 (gevent.util.format_run_info()
只收集并返回此信息)。绿叶小树是根据产生它们的绿叶小树组织成一棵树的。
这个 print_run_info
函数通常连接到信号处理程序,以在任何给定时间获取应用程序状态。
对于每个Greenlet,打印以下信息:
其当前执行堆栈
如果它没有运行,它的终止状态和
gevent.Greenlet.value
或gevent.Greenlet.exception
它的父级(通常是中心)
它的
name
这个
spawn tree locals
(仅用于产卵树的根)。所有人的口述
gevent.local.local
Greenlet中使用的对象。
greenlet树本身被表示为一个对象,您也可以将其用于自己的目的: gevent.util.GreenletTree
.
分析#
Github存储库 nylas/nylas-perftools 有一些与Gevent兼容的配置文件。
stacksampler
是指在服务器进程中的greenlet中运行并通过HTTP服务器公开数据的采样探查器;它被设计为适合生产使用。py2devtools
是一个支持greenlet的跟踪探查器,它输出可由chrome dev工具使用的数据;它用于开发人员使用。