解决 Plone 死锁问题的现代方法是什么?



我目前有一个Plone 4.3.8站点,在那里编辑portlet会导致死锁。

我正试图找到解决这个问题的工具,但大多数死锁工具都不起作用;我没有从那些至少跑步的人那里得到好的信息。

我试过:

  • z3c.deadlockdebugger=>无法访问堆栈
  • ZopeHealthWatcher=>无法在命令行(或网页)上查看结果
  • Products.LongRequestLogger=>也许是迄今为止最好的,它给了我一些日志输出-但它的堆栈跟踪集中在Diazo代码上,但当Diazo不在范围内时(针对127.0.0.1运行),问题仍然会发生
  • gdb attach-刚让我用C代码
  • winpdb=>它不能像gdb那样连接到正在运行的进程(只能连接到winpdb启动的有意连接的进程)
  • Products.signalstack(OR Products.signalstacklogger)=>USR1信号刚刚关闭了一个zope进程

注意:z3c.deadlockdebugger(以及依赖它的东西)需要签出源代码才能删除线程框架依赖项。

我的情况似乎与产品升级有关-可能是plone.app.contenttypes或plone.ap.multilanguage中的一个或两个,一个空网站没有这个问题,但我显然需要我的网站数据!

我应该做些什么来推进这项工作?

编辑:

我相信Maurits的答案是最正确的,但对我来说并没有用。我最终做的是使用pdb来跟踪代码挂起的点(在plone.app.debugtoolbar中)

你说在使用Products.signalstack时使用USR1信号会关闭Zope。但不需要特殊的软件包,所以我想知道添加signalsstack是否有关闭Zope的副作用。

至少对我来说,几周前,这在Plone 4.3的网站上运行得很好:

kill -USR1 $(cat var/zeoclient.pid)

尽管@maurits的答案是正确的(也是最简单的答案),但有时我在查看kill命令产生的回溯时遇到了问题:有时在事件日志中找到,有时在shell中找到。

我更喜欢将构建与haufe.requestmonitoring集成,同时配置monitor长时间运行的请求功能。您将在事件日志中看到死锁的回溯,并且您还激活了一个用于监视Plone上低性能的工具。

相关内容

最新更新