Apache套接字未关闭?

6
我有一个使用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上。
那么,我应该采取什么措施来解决这个问题?
2个回答

6

SetEnv proxy-nokeepalive 1 可能会立即告诉您Apache和CP之间的keepalive是否存在问题。有关更多信息,请参见mod_proxy文档


5
你可以运行netstat命令,查看是否有大量处于TIME_WAIT状态的套接字。根据你的MaxUserPort设置,你可能会严重限制可用端口的数量。此外,TcpTimedWaitDelay通常设置为240秒,因此任何已使用的套接字都不能在四分钟内被重复使用。
这里有更多有用的信息 --> http://smallvoid.com/article/winnt-tcpip-max-limit.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接