웹 서버로 cherrypy를 사용하고 있습니다. 그것은 내 응용 프로그램에 대한 좋은 성능을 제공하지만 거기에 아주 큰 문제가 있습니다. 거기로 소켓을 만들 수 없다는 시간의 몇 후 cherrypy 충돌이 너무 많은 파일을 엽니 다cherrypy 소켓을 닫지 마십시오
[21/Oct/2008:12:44:25] ENGINE HTTP Server
cherrypy._cpwsgi_server.CPWSGIServer(('0.0.0.0', 8080)) shut down
[21/Oct/2008:12:44:25] ENGINE Stopped thread '_TimeoutMonitor'.
[21/Oct/2008:12:44:25] ENGINE Stopped thread 'Autoreloader'.
[21/Oct/2008:12:44:25] ENGINE Bus STOPPED
[21/Oct/2008:12:44:25] ENGINE Bus EXITING
[21/Oct/2008:12:44:25] ENGINE Bus EXITED
Exception in thread HTTPServer Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.3/threading.py", line 436, in __bootstrap
self.run()
File "/usr/lib/python2.3/threading.py", line 416, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.3/site-packages/cherrypy/process/servers.py", line 73, in
_start_http_thread
self.httpserver.start()
File "/usr/lib/python2.3/site-packages/cherrypy/wsgiserver/__init__.py", line 1388, in start
self.tick()
File "/usr/lib/python2.3/site-packages/cherrypy/wsgiserver/__init__.py", line 1417, in tick
s, addr = self.socket.accept()
File "/usr/lib/python2.3/socket.py", line 167, in accept
sock, addr = self._sock.accept()
error: (24, 'Too many open files')
[21/Oct/2008:12:44:25] ENGINE Waiting for child threads to terminate..
내가 무슨 일이 일어 났는지 알아 내기 위해 노력했다. 내 응용 프로그램은 파일이나 소켓 등을 열지 않습니다. 내 파일은 berkeley dbs 몇 개만 열립니다. 나는이 문제를 더 깊이 조사했다. 처음에/etc/4536/fd/ 에 새로운 cherrypy 프로세스에서 사용 된 파일 디스크립터를 보았습니다. 처음에는 새 소켓이 생성되고 올바르게 정리되었지만 한 시간 후에 청소되지 않은 소켓이 약 509 개가 발견되었습니다. 모든 소켓은 CLOSE_WAIT 상태였습니다. 다음 명령을 사용하여이 정보를 얻었습니다 :
netstat -ap | grep "4536" | grep CLOSE_WAIT | wc -l
CLOSE_WAIT 상태는 원격 클라이언트가 연결을 종료했음을 의미합니다. 왜 cherrypy가 소켓을 닫지 않고 파일 디스크립터를 해제하지 않는가? 문제를 해결하려면 어떻게해야합니까?
나는 다음과 같이 재생하려고 :cherrypy.config.update({'server.socketQueueSize': '10'})
내가이 10 언제든지 열려있는 소켓의 수를 제한하는 것이지만, 전혀 효과가 없다라고 생각했습니다. 이 설정은 내가 설정 한 유일한 설정이므로 나머지 configs는 기본값을 유지합니다.
누군가가 빛을 발할 수 있습니까? 체리 피의 버그라고 생각하니? 어떻게 해결할 수 있습니까? 이 소켓을 직접 닫을 수있는 방법이 있습니까?
다음은 내 시스템 정보입니다 :
CherryPy-3.1.0
파이썬 2.3.4
레드햇 사전에 4 (Nahant 업데이트 7)
감사 엔터프라이즈 리눅스 ES 릴리스 !
최소한의 재생기를 제작하고 게시 할 수 있다면 유용 할 것입니다. 우리가 우리 자신의 환경에서 재생산 할 수 없다면 어떤 제안도 추측 일뿐입니다. –