가끔 교수형에 처하는 PHP 웹 응용 프로그램이 있습니다. 페이지로 이동하면 최대 실행은 210이지만 몇 시간 동안로드하려고하면 거기에 앉아있을 것입니다.이 응용 프로그램은 물건을 다운로드하기 위해 프록시 뒤에 컬을 사용합니다. 오류보고는 모두로 설정되어 있지만 페이지가 비어 있고 매달 기 때문에 문제가되지 않습니다.디버깅 중단 PHP
PHP 프로세스를 디버깅 할 때 아무것도 찾을 수 없습니다.
가끔 교수형에 처하는 PHP 웹 응용 프로그램이 있습니다. 페이지로 이동하면 최대 실행은 210이지만 몇 시간 동안로드하려고하면 거기에 앉아있을 것입니다.이 응용 프로그램은 물건을 다운로드하기 위해 프록시 뒤에 컬을 사용합니다. 오류보고는 모두로 설정되어 있지만 페이지가 비어 있고 매달 기 때문에 문제가되지 않습니다.디버깅 중단 PHP
PHP 프로세스를 디버깅 할 때 아무것도 찾을 수 없습니다.
마지막으로 확인했는데 HTTP/IO 작업은 PHP 시간 외에 발생하므로 CURL이 죽거나 시간이 초과 될 가능성이 있습니다.
IO이므로 php는 일부 시스템 라이브러리를 버리고 "select"를 호출하여 다시 돌아올 때까지 기다립니다.
다시 돌아 오지 않는 경우 PHP 코드가 루핑되지 않으므로 다시 돌아 오지 않을 수도 있습니다.
저는 돈이 곱슬 곱슬하게 나왔습니다. 나는 몇 년 전에 비슷한 스크립트를 추가했다. 스크립트를 가끔씩 달았다. 나는 그 문제가 정확히 무엇인지 기억하고 싶지만, 컬이 잘못된 라이브러리 밑으로 링크하고 있다는 결론을 내렸다. (편집) 실제로, 저의 컬 라이브러리가 이전 버전의 openssl을 사용하고 있다는 것이 제 경우에는 SSL 라이브러리라고 확신합니다.
먼저 모든 curl_setopt()
호출을 제거한 다음 다시 추가하여 오류를 격리 할 수 있는지 확인하는 것이 좋습니다. i 명령 줄에서 동일한 curl 명령을 실행하면 오류가 즉시 표시 될 수 있습니다.
curl이 사용하고있는 openssl 라이브러리를 업데이트하여 해결했습니다.
뒷 배경에서 어떤 일이 일어나고 있는지 확인할 수 있습니다. xdebug를 설치 한 다음 트리거 된 프로파일 링 (? XDEBUG_PROFILE = 1)을 사용하면 kcachegrind/etc ...와 호환되는 파일 시스템에 로그를 출력합니다. 실행이 매달리는 곳을 볼 수 있습니다. 물론
, 그것은 가장 가능성이 컬 문제 ....
Xdebug 좋은 생각이며, 도움이되지 않는 경우에, 나는 또한 ktrace 형태, strace를 또는 트러스를 통해 웹 서버를 실행하는 것이 좋습니다 것입니다 . 그것은 당신에게 그것이 무엇을하고 무엇을 매달릴 수 있는지 정확히 보여줍니다.
임시 연결 문제가 있거나 응용 프로그램이 의존하는 다른 문제가있는 것 같습니다.
Apache를 사용하는 경우 Apache HTTP Debugging Guide을 확인하십시오. 가이드는 약간의 nix 중심이지만 모든 웹 서버에 적용 할 수 있습니다.
웹 서버를 디버깅하는 것 외에 프록시가 항상 응답하고 다운로드 소스를 항상 사용할 수 있는지 확인하는 것이 좋습니다. 이러한 검사는 nagios과 같은 도구 또는 Pingdom과 같은 타사 서비스를 사용하여 추가 할 수 있습니다. 마지막으로, 임시 DNS 문제 일 수도 있으므로 IP를 사용하여 프록시 및 다운로드 소스에 연결하거나 DNS 서비스 모니터링을 추가 할 수 있습니다.
이 절름발이 소리,하지만 당신의 페이지 요청의 매우 시작 파일 핸들을 연 다음 /tmp/debug.txt하는 fwrites 일을 시작하는 것입니다 HTH. 마지막 파일이 어디에서 기록되는지 확인한 다음 다양한 변수 값을 해당 영역의 파일로 반향 출력합니다.바이너리 검색 이론을 사용하여 코드에서 더 정밀하고 정밀한 해상도 섹션으로 fwrites를 배포하십시오.
i.e.
$fh = fopen("/tmp/debug.txt", "w");
fwrite($fh, "made it to here 1 \n");
//some code
fwrite($fh, "made it to here 2 \n");
//more code
fwrite($fh, "made it to here 3 \n");