【发布时间】:2008-10-02 17:40:38
【问题描述】:
我有一个使用 CherryPy 编写的 Web 应用程序,它在 127.0.0.1:4321 上本地运行。我们使用 mod-rewrite 和 mod-proxy 让 Apache 充当反向代理; Apache 还处理我们的 SSL 加密,最终可能用于传输我们所有的静态内容。
这一切都适用于小型工作负载。但是,我最近使用urllib2 编写了一个压力测试脚本,可以模拟 100 个客户端的工作负载。一段时间后,每个客户端都收到来自 Apache 的 503 错误,表明 Apache 无法连接到127.0.0.1:4321。 CherryPy 运行正常,但我的 Apache 错误日志显示如下行:
[Thu Oct 02 12:55:44 2008] [error] (OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted. : proxy: HTTP: attempt to connect to 127.0.0.1:4321 (*) failed
谷歌搜索此错误表明 Apache 可能已用完套接字文件描述符。由于我只有 100 个客户端在运行,这意味着连接没有被关闭,无论是在我的 urllib2 连接和 Apache 之间(我肯定在 urlopen 的返回值上调用 .close()),或者在 Apache 和 CherryPy 之间.
我已确认我的 urllib2 请求正在发送 HTTP Connection: close 标头,尽管 Apache 配置了 KeepAlive On 如果这很重要。
以防万一,我使用的是 Python 2.5、Apache 2.2、CherryPy 3.0.3,并且服务器在 Windows Server 2003 上运行。
那么,解决这个问题的下一步是什么?
【问题讨论】:
标签: python apache urllib2 cherrypy mod-proxy