我目前有一個Plone 4.3.8站點,編輯portlet會導致死鎖。解決Plone僵局問題的現代方法是什麼?
我正在嘗試找到解決此問題的工具,但大多數死鎖工具不起作用&我沒有從至少運行那些信息獲取良好信息(IMO)。
我已經試過:
- z3c.deadlockdebugger =>不能得到一個堆棧跟蹤
- ZopeHealthWatcher =>無法看到命令行(或網頁)
- Products.LongRequestLogger結果=>可能是迄今爲止最好的,給了我一些日誌輸出 - 但它的堆棧跟蹤重點是重數代碼,但問題仍然發生時,重氮不在範圍內(針對127.0.0.1運行)
- gdb attach - 剛剛降落我在C代碼
- winpdb =>它不能以與gdb相同的方式附加到正在運行的進程(僅適用於以winpdb附件爲目的的進程啓動的進程)
- Products.signalstack = = USR1信號只會關閉一個zope過程!
注意:z3c.deadlockdebugger(以及依賴於它的東西)需要檢出source code以刪除線程框依賴關係。
我的情況似乎與產品升級有關 - 可能是一個或兩個plone.app.contenttypes或plone.app.multilingual,一個空的網站沒有這個問題,但我顯然需要我的網站數據!
該怎麼辦?
編輯:
我相信Maurits的回答是最正確的,但它並沒有我的情況下工作。我最終做的是使用pdb來追蹤代碼掛起的點(在plone.app.debugtoolbar中,因爲它發生了)
關於線程框依賴關係:它被長期棄用,但您也可以選擇將其包含在您的構建中,並將其添加到「eggs」部分。因爲它沒有在pypi上發佈,所以你還必須添加一個'find-links'('https://majid.info/python/threadframe/')和'allow-hosts'。 –
@keul majid的網站[threadframe上的文章](https://majid.info/blog/threadframe-multithreaded-stack-frame-extraction-for-python/)說:「Python 2.5及更高版本包含一個函數sys._current_frames( )「所以我採取的建議 – Danimal
是的,這是真的,但如果你不想修改源代碼,你仍然可以使用線程框架(儘管不建議使用和無用)。 –