2008-11-05 3 views
4

가끔 교수형에 처하는 PHP 웹 응용 프로그램이 있습니다. 페이지로 이동하면 최대 실행은 210이지만 몇 시간 동안로드하려고하면 거기에 앉아있을 것입니다.이 응용 프로그램은 물건을 다운로드하기 위해 프록시 뒤에 컬을 사용합니다. 오류보고는 모두로 설정되어 있지만 페이지가 비어 있고 매달 기 때문에 문제가되지 않습니다.디버깅 중단 PHP

PHP 프로세스를 디버깅 할 때 아무것도 찾을 수 없습니다.

답변

2

마지막으로 확인했는데 HTTP/IO 작업은 PHP 시간 외에 발생하므로 CURL이 죽거나 시간이 초과 될 가능성이 있습니다.

IO이므로 php는 일부 시스템 라이브러리를 버리고 "select"를 호출하여 다시 돌아올 때까지 기다립니다.

다시 돌아 오지 않는 경우 PHP 코드가 루핑되지 않으므로 다시 돌아 오지 않을 수도 있습니다.

1

저는 돈이 곱슬 곱슬하게 나왔습니다. 나는 몇 년 전에 비슷한 스크립트를 추가했다. 스크립트를 가끔씩 달았다. 나는 그 문제가 정확히 무엇인지 기억하고 싶지만, 컬이 잘못된 라이브러리 밑으로 링크하고 있다는 결론을 내렸다. (편집) 실제로, 저의 컬 라이브러리가 이전 버전의 openssl을 사용하고 있다는 것이 제 경우에는 SSL 라이브러리라고 확신합니다.

먼저 모든 curl_setopt() 호출을 제거한 다음 다시 추가하여 오류를 격리 할 수 ​​있는지 확인하는 것이 좋습니다. i 명령 줄에서 동일한 curl 명령을 실행하면 오류가 즉시 표시 될 수 있습니다.

curl이 사용하고있는 openssl 라이브러리를 업데이트하여 해결했습니다.

1

뒷 배경에서 어떤 일이 일어나고 있는지 확인할 수 있습니다. xdebug를 설치 한 다음 트리거 된 프로파일 링 (? XDEBUG_PROFILE = 1)을 사용하면 kcachegrind/etc ...와 호환되는 파일 시스템에 로그를 출력합니다. 실행이 매달리는 곳을 볼 수 있습니다. 물론

, 그것은 가장 가능성이 컬 문제 ....

0

Xdebug 좋은 생각이며, 도움이되지 않는 경우에, 나는 또한 ktrace 형태, strace를 또는 트러스를 통해 웹 서버를 실행하는 것이 좋습니다 것입니다 . 그것은 당신에게 그것이 무엇을하고 무엇을 매달릴 수 있는지 정확히 보여줍니다.

임시 연결 문제가 있거나 응용 프로그램이 의존하는 다른 문제가있는 것 같습니다.

Apache를 사용하는 경우 Apache HTTP Debugging Guide을 확인하십시오. 가이드는 약간의 nix 중심이지만 모든 웹 서버에 적용 할 수 있습니다.

웹 서버를 디버깅하는 것 외에 프록시가 항상 응답하고 다운로드 소스를 항상 사용할 수 있는지 확인하는 것이 좋습니다. 이러한 검사는 nagios과 같은 도구 또는 Pingdom과 같은 타사 서비스를 사용하여 추가 할 수 있습니다. 마지막으로, 임시 DNS 문제 일 수도 있으므로 IP를 사용하여 프록시 및 다운로드 소스에 연결하거나 DNS 서비스 모니터링을 추가 할 수 있습니다.

0

이 절름발이 소리,하지만 당신의 페이지 요청의 매우 시작 파일 핸들을 연 다음 /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"); 
관련 문제