我有一个使用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请求正在发送HTTPApache头,尽管Connection: close配置了KeepAlive On (如果这很重要的话)。
如果重要的话,我使用的是Python2.5、Apache2.2、CherryPy 3.0.3,服务器运行在Windows Server2003上。
那么我的下一步是什么来阻止这个问题呢?
发布于 2008-10-02 21:52:04
如果问题出在SetEnv proxy-nokeepalive 1和CP之间,Apache会马上告诉你。有关更多信息,请参阅mod_proxy docs。
发布于 2008-10-02 20:02:22
您可以运行netstat命令,查看是否有一堆套接字处于TIME_WAIT状态。根据您的MaxUserPort设置,您可以使用的端口数量可能会受到严格的限制。此外,TcpTimedWaitDelay通常设置为240秒,因此使用的任何套接字在四分钟内都不能重用。
这里有更多有用的信息--> http://smallvoid.com/article/winnt-tcpip-max-limit.html
https://stackoverflow.com/questions/163603
复制相似问题