我有一个使用CherryPy编写的Web应用程序,本地运行在
对于小工作量,这一切都很好。然而,我最近使用
我确认我的
如果有影响的话,我使用Python 2.5,Apache 2.2,CherryPy 3.0.3,并且服务器运行在Windows Server 2003上。
那么,我应该采取什么措施来解决这个问题?
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上。
那么,我应该采取什么措施来解决这个问题?