我目前有一个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上低性能的工具。