转储长时间运行的zope2请求的顺序堆栈跟踪

Products.LongRequestLogger的Python项目详细描述


简介

此产品将zope2实例的长时间运行请求的堆栈跟踪转储到 日志文件。如果一个请求占用的时间超过了配置的超时时间,那么它就是堆栈跟踪 将定期转储到日志文件中。

它是由莱昂纳多·罗谢尔·阿尔梅达创作的,并使开发人员能够 由Nexedi慷慨捐赠的时间,以及设计 Sébastien Robin和Julien的意见混乱不堪。

警告

products.longrequestlogger不工作,如果 sauna.reload已启用。

安装

buildout安装

在零件的鸡蛋列表中添加“products.longrequestlogger” 它定义了你的zope实例。

配置

添加(或更改)您的 zope.conf设置为如下:

<product-config LongRequestLogger>
    logfile $INSTANCE/log/longrequest.log0.log
    timeout 4
    interval 2
</product-config>

可以识别以下变量:

  • “logfile”: This is a mandatory variable. Its absence means the LongRequestLogger monkey-patch to the publication machinery will not be applied. It should point to a file where you want the long requests to be logged.
  • “timeout”: The amount of seconds after which long requests start being logged. Accepts floating point values and defaults to 2.
  • “interval”: The frequency at which long requests will have their stack trace logged once they have exceeded their ‘timeout’ above. Defaults to 1 and accepts floating point values.

解释结果

重要的是要记住一些关于 Zope2应用程序和线程,同时查看结果:

  1. Each thread only handles one request at a time.
  2. Slow requests will usually have tracebacks with a common top part and a variable bottom part. The key to the cause of the slowdown in a request will be in the limit of both.

如果你手头拮据,不想把文件分析成排名最慢的 用于调查的URL,以秒为单位选取一个时间,该时间是 时间间隔加上超时和grep。对于默认设置,为 超时和间隔,您将找到4秒、6秒和8秒的日志项, 所以你可以做一个像这样的grep:

$ grep -n "Running for 8" longrequest.log

并决定与网址显示更多。然后您可以打开日志文件,转到 报告的行号,并通过向上和向下搜索来导航回溯 相同线程ID的文件(报告的 行)。然后分析单个请求的回溯之间的差异 了解此特定请求正在执行的操作以及为什么它正在减速 向下。

通过对许多类似的请求执行此操作,您将能够提出 优化或缓存策略。

更改日志

2.1.0(2017-09-11)

  • 记录转储请求时引发的异常。不可打印 请求导致监视器线程死亡,导致eppe错误 在zpublisher包装中。
  • 如果没有改变,不要重复请求信息、回溯或sql查询。

2.0.0(2015-11-04)

  • 配置现在通过zope.conf中的“product config”部分完成, 而不是环境变量。
  • zmysqlda执行的日志查询。
  • 如果堆栈跟踪输出与 上一个堆栈跟踪。
  • 删除用于在运行时更改行为的看似未使用的机制 更改环境变量,例如将日志重定向到不同的 文件名,停止日志记录或更改超时。原木旋转蒸馏器 正常工作。
  • 停止为每个请求创建和结束一个额外线程。相反,一个 监视线程在启动时启动。
  • 放弃与python<;2.6的兼容性。

1.1.0(2012-09-10)

  • 一些代码可读性的重构。
  • 使用os.pipe()对和select.select()而不是 threading.condition以指示监视器何时应停止跟踪 原来的线。这在某些方面避免了性能瓶颈 安装了vmware,但似乎没有很好的锁定性能 在某些情况下。
  • 将日志机制与zope和zconfig的信号处理集成起来 旋转文件处理程序,以便usr2信号将导致长请求日志 以类似于访问和事件日志的方式重新打开。

1.0.0(2010-10-28)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java标准API:在具有继承用户权限的树中查找实体   带有Hibernate和注释的java多对多自引用   java如何下载和安装Xugler?   java如何向JFrame JButton添加操作?   java如何安装自定义LAF?   java将旧对象的id分配给新对象将把它作为重复的@ManyToMany插入   java如何从WSDL生成/创建服务端点?   java使用基于iText Core的OpenPdf从pdf页面删除或更新添加的图像图标   java WeakHashMap,具有Long、Int或String等类型   java在JFrame中获取和更改值   java变量在扩展另一个类的类中不可见   地理定位Java和GeoLite数据库:如何使用GeoLiteCity。生产方式中的dat?   java类加载器应该能够解析和加载来自不同包的类吗?   java试图调用虚拟方法Volley Android Api   UDP数据报在Java中仅显示第一个字符