CentOS 6을 실행하는 가상 머신이 있습니다. 이 Linux 상자에서는 4개의 컬 다운로드를 동시에 실행하고 있습니다.
어떤 경우에는 컬 다운로드 중 하나가 중단됩니다. ps
컬 프로세스가 아직 존재함을 나타냅니다. 그리고 netstat
연결된 RECV_Q가 매우 길다는 것을 보여줍니다.
tcp 878104 0 10.161.238.20:46130 10.162.220.12:80 ESTABLISHED
버전 curl
7.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)을 사용해 볼 수 있습니다.