1

我在 Plone 4.1.6 中,如果您进入站点设置 > 用户和组,然后单击用户的复选框“重置密码”并单击“应用更改”,系统就会挂起,5 分钟后我收到此错误阿帕奇:

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 再次响应。

我的环境:

  • 克隆 4.1.6 (4115)
  • CMF 2.2.6
  • 佐普 2.13.15
  • Python 2.6.8(未知,2013 年 4 月 27 日,22:01:31)[GCC 4.6.3]
  • 插件:
    • 重氮主题支持 1.0b8 安装控制面板以允许使用重氮进行动态主题
    • Thème Plone classique 1.1.2 L'ancien thème utilisé dans Plone 3 et versions antérieures。
    • 静态资源存储 1.0b5 用于存储和提供静态资源文件的文件夹
  • 我在 Aapache 后面运行 Plone
  • 本地测试
  • 使用 VirtualBox 4.2.12 运行虚拟机
  • Plone 安装在虚拟机上
  • 克隆版本是 4.1.6
  • 虚拟机正在运行 Ubuntu 12.04 AMD64
  • Zeocluster 有 2 个客户端
  • 在 Plone 实例中正确配置了电子邮件

据我所知,我的 Plone 实例一切正常,包括用户和组中可用的其他复选框。

我使用 ssmtp 进行了测试,以从我在 vm 上的节点向自己发送电子邮件,并且发送电子邮件没有问题。

我确实尝试了 fg 模式,一切似乎都很好。

我确实检查了 Apache 日志,一切似乎都还不错。

如果创建 ssh 隧道以避免 Apache 并直接访问 Plone,我没有代理错误,但系统永远挂起。

我不知道该怎么做才能解决这个问题。任何想法?

4

1 回答 1

1

python进程挂起时是否使用大量CPU?使用顶部检查。

安装ZopeHealthWatcher,然后当它再次挂起时,使用 zope health watcher 获取每个线程正在做什么的列表。这通常会让您了解代码在循环中的位置,在某种无限递归中(这可能发生在 zodb 中,尤其是在获取和类似命名的事物中),或者它是否只是阻塞某些东西(例如,到 smtp 服务器的网络链接上的 mtu 问题,所以小电子邮件工作但大电子邮件挂起)。

你也可以停止 smtp 服务器(或者只是在 plone 控制面板中更改端口),看看你是否至少得到了一个例外。默认情况下,如果 Plone 无法连接到 smtp 服务器,它应该引发异常。

在非常极端的情况下,您可以使用 gdb连接到挂起的 python 进程(我通常使用“top”来查找位于 100% CPU 的进程),然后您可以找到它挂起的位置。这比使用 ZopeHealthWatcher 复杂得多,但我最近使用这种方法成功地跟踪到了 reportlabs 字体代码中的竞争条件,它非常强大。gdb 有什么好处,它会停止进程并允许您单步执行代码并上下调用堆栈,这与 ZopeHealthWatcher 不同,它只是为您提供快照(有点像海森堡不确定性的东西,您可以观察它在哪里就是现在...)

于 2013-05-03T10:03:38.060 回答