监控和调试gevent应用程序

GEvent应用程序通常是长时间运行的服务器进程。从1.3版开始,gevent对监视此类应用程序和了解它们有特殊的支持。

小技巧

有关其他一些工具,请参见 issue 1021 .

监视器线程

GEvent可以 configured 启动本机线程来监视它创建的每个集线器。开箱即用,那条线支持看两件事,但你可以 add your own functions 在此线程中定期调用。

舞台调度

当启用监视线程时,默认情况下,它将监视阻止事件循环超过 configurable 时间间隔。当检测到这样一个阻塞的greenlet时,它将打印 a report 到轮毂的 exception_stream . 它也会发出 gevent.events.EventLoopBlocked 事件。

参见

gevent.util.assert_switches()

对于这个的作用域版本。

内存使用

或者,您可以设置 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,打印以下信息:

greenlet树本身被表示为一个对象,您也可以将其用于自己的目的: gevent.util.GreenletTree .

分析

Github存储库 nylas/nylas-perftools 有一些与Gevent兼容的配置文件。

  • stacksampler 是指在服务器进程中的greenlet中运行并通过HTTP服务器公开数据的采样探查器;它被设计为适合生产使用。

  • py2devtools 是一个支持greenlet的跟踪探查器,它输出可由chrome dev工具使用的数据;它用于开发人员使用。

Next page: 事件循环实现:libuv和libev