문제

Cherrypy를 사용하여 작성된 웹 응용 프로그램이 있습니다. 127.0.0.1:4321. 우리는 Mod-Lerewrite와 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 연결과 아파치 (나는 확실히 전화를 걸고 있습니다 .close() 반환 값에서 urlopen) 또는 아파치와 체리 사이.

나는 그것을 확인했다 urllib2 요청이 HTTP를 보내고 있습니다 Connection: close 헤더, Apache가 구성되어 있지만 KeepAlive On 그것이 중요하다면.

중요한 경우 Python 2.5, Apache 2.2, Cherrypy 3.0.3을 사용하고 있으며 서버가 Windows Server 2003에서 실행 중입니다.

그렇다면이 문제를 막기위한 다음 단계는 무엇입니까?

도움이 되었습니까?

해결책

SetEnv proxy-nokeepalive 1 문제가 Apache와 CP 사이의 문제라면 즉시 말해 줄 것입니다. 참조 mod_proxy 문서 더 많은 정보를 위해서.

다른 팁

NetStat 명령을 실행하고 Time_wait 상태에 소켓이 많은지 확인할 수 있습니다. Maxuserport 설정에 따라 사용할 수있는 포트 수가 심각하게 제한 될 수 있습니다. 또한 TCPTIMEDWAITDELAY는 일반적으로 240 초로 설정되므로 사용되는 소켓은 4 분 동안 재사용 할 수 없습니다.

여기에 더 좋은 정보가 있습니다 -> http://smallvoid.com/article/winnt-tcpip-max-limit.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top