개방형 소켓 처리기와 netstat DGRAM 항목이 너무 많은 이유는 무엇입니까?

개방형 소켓 처리기와 netstat DGRAM 항목이 너무 많은 이유는 무엇입니까?

나는 다양한 API를 쿼리하고 이를 사용하는 다른 응용 프로그램에서 사용할 API를 제공하는 RPi(Raspbian ) 3.12.35+ #730 PREEMPT Fri Dec 19 18:31:24 GMT 2014 armv6l GNU/Linux에서 Python 2.7.8의 데몬을 실행하고 있습니다 requests(둘 다 동일한 컴퓨터에서 실행 중입니다). 나는 최근 로그에서(데몬이 한동안 실행된 후) 예외를 통해 열린 파일 핸들러가 부족하다는 사실을 발견했습니다 requests.

('Connection aborted.', error(23, 'Too many open files in system'))

명시적으로 파일을 열지 않았기 때문에 내 http통화가 열려 있는 것으로 의심됩니다.

나는 약 10초마다(주로 localhost로) 호출하고 한두 시간 동안 데몬을 실행한 후 lsof32,000개가 넘는 열린 연결을 보고합니다 sock.

python2     804             pi  982u     unix 0xce3565a0        0t0     116809 socket
python2     804             pi  983u     unix 0xcb5553c0        0t0     116875 socket
python2     804             pi  984u     unix 0xcb555780        0t0     116899 socket
python2     804             pi  985u     unix 0xd74dd1e0        0t0     117010 socket
python2     804             pi  986u     unix 0xcb555d20        0t0     116918 socket

이 숫자는 모든 애플리케이션의 호출 속도에 따라 다소 증가합니다.

'Connection': 'close'코드에서 명시적으로 설정하여 이러한 연결을 강제로 닫고 싶었지만 불행히도 이것이 도움이 되지 않았습니다. lsof셀 수 없이 많은 열린 sock핸들러가 여전히 표시되었습니다.

netstat많은 수 DGRAM의 연결 표시(약 12,000개 이상):

(...)
unix  2      [ ]         DGRAM                    74315
unix  2      [ ]         DGRAM                    68340
unix  2      [ ]         DGRAM                    67749
unix  2      [ ]         DGRAM                    58836
unix  2      [ ]         DGRAM                    58087
(...)

더 걱정되는 점은 tcp 시퀀스가 ​​네트워크 수준에서 올바르게 닫히는 것 같다는 것입니다.

여기에 이미지 설명을 입력하세요.

그래서 나는 여기서 길을 잃었습니다. 열린 설명자 수의 증가는 http 호출로 인한 것일 수 있지만 왜 그들이 열린 핸들러를 남겨두는지 이해하는 데 어려움이 있습니까?

참고: 원래 이 질문은 SO(내 코드를 가리키며)에 대해 질문했지만 시스템 지향적이라고 생각합니다.

관련 정보