http 다운로드 중에 컬이 중단됩니다.

http 다운로드 중에 컬이 중단됩니다.

CentOS 6을 실행하는 가상 머신이 있습니다. 이 Linux 상자에서는 4개의 컬 다운로드를 동시에 실행하고 있습니다.

어떤 경우에는 컬 다운로드 중 하나가 중단됩니다. ps컬 프로세스가 아직 존재함을 나타냅니다. 그리고 netstat연결된 RECV_Q가 매우 길다는 것을 보여줍니다.

tcp   878104      0 10.161.238.20:46130         10.162.220.12:80            ESTABLISHED 

버전 curl7.38.0.

어떤 아이디어가 있나요? 왜 curl멈추나요? TCP 버퍼를 늘리면 도움이 될까요?

답변1

큰 정적 수신 큐는 소켓에서 데이터가 수신되었지만 컬이 데이터를 읽지 않았음을 나타냅니다.

TCP 버퍼를 늘려도 도움이 되지 않습니다.

이것은 병적인 경우입니다. HTTP 요청의 경우, 컬은 요청(또는 청크된 경우 요청)을 보내고 응답을 읽도록 설계되었습니다. 응답을 읽지 못하면 일시 중지되었거나 다른 작업을 수행 중입니다.

예를 들어, 표준 출력에 응답을 쓰는 것이 전체 파이프이거나 신뢰할 수 없는 네트워크 파일 시스템의 파일에 쓰는 등의 이유로 차단될 수 있습니다.

ps -o state,wchan,args -C curl

또는

pgrep -x curl | xargs -IP cat /proc/P/stack

curl응답을 읽지 못하게 하는 작업 에 대한 단서를 제공할 수 있습니다 ( /proc/$pid/task/*/stack멀티 스레드 애플리케이션에서도 작동함).

답변2

실행 curl해 보거나 strace최신 버전 curl(버전 7.50.3)을 사용해 볼 수 있습니다.

관련 정보