我在Plone 4.1.6,如果你进入网站设置>用户和组,然后单击用户的“重置密码”复选框,然后单击“应用更改”,系统挂起,5分钟后我从Apache收到此错误:
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request POST /@@usergroup-userprefs.
Reason: Error reading from remote server
Apache/2.2.22 (Ubuntu) Server at 192.168.1.4 Port 443
错误发生后,我必须重新启动Plone才能让Plone再次响应。
我的环境:
据我所知,我的Plone实例一切正常,包括用户和组中的其他复选框。
我使用ssmtp进行测试,从vm上的节点向我发送电子邮件,发送电子邮件没问题。
我确实尝试了fg模式,一切似乎都没问题。
我确实检查了Apache日志,一切似乎都没问题。
如果创建一个ssh隧道以避免Apache并直接访问Plone,我没有代理错误,但系统会永远挂起。
我不知道如何解决这个问题。有什么想法吗?
答案 0 :(得分:1)
python进程挂起时是否会占用大量CPU?使用top进行检查。
安装ZopeHealthWatcher,然后当它再次挂起时,使用zope运行状况监视器获取每个线程正在执行的操作的列表。这通常会让你知道代码在循环中的位置,某种无限递归(这可能发生在zodb中,特别是在获取和类似命名的东西中),或者它只是阻塞某些东西(例如,mtu在连接到smtp服务器的网络链接上发出问题,因此小型电子邮件可以工作但很大的电子邮件会挂起。)
你也可以停止smtp服务器(或者只是改变plone控制面板中的端口),看看你是否至少得到了一个例外。默认情况下,如果Plone无法连接到smtp服务器,则应该引发异常。
在非常极端的情况下,你可以use gdb连接到挂起的python进程(我通常使用“top”来找到一个坐在100%CPU上的进程),然后你可以找到它挂起的位置。这比使用ZopeHealthWatcher要复杂得多,但是我最近使用这种方法成功地追溯了报告字体代码中的竞争条件,它非常强大。关于gdb的好处是,它会停止进程并允许你逐步调试代码,以及调用堆栈的上下,不像ZopeHealthWatcher只是给你一个快照(有点像Heissenberg的不确定性,你可以观察它在哪里现在是......)