2013-12-23 6 views
6

가끔 아파 타임에 의해 종료되고 브라우저에 504 Gateway Time-out 오류가 발생하는 원인이되는 Perl CGI 애플리케이션이 있습니다. 그러나 나는 내가 프로필 데이터를 읽을 수 없습니다, NYTProf를 사용하여이 응용 프로그램을 프로파일 링하려고 : 나는 sigexit=1 NYTProf 옵션을 사용하고시간 초과되는 Perl CGI 스크립트 프로파일 링

$ nytprofhtml -f www/cgi-local/nytprof.out 
Reading www/cgi-local/nytprof.out 
Profile data incomplete, inflate error -5 ((null)) at end of input file, perhaps the process didn't exit cleanly or the file has been truncated (refer to TROUBLESHOOTING in the documentation) 

.

#!/usr/bin/perl -d:NYTProf 

sleep 1 while 1; 

답변

6

는 다음 신호를 잡으려고 NYTProf을 알려줍니다

INT HUP PIPE BUS SEGV 

을하지만, 밖으로 당신의 CGI 스크립트 시간, 아파치가 SIGTERM을 보낼 때. 당신은 SIGTERM를 잡을해야합니다

sigexit=int,hup,pipe,bus,segv,term 
:

sigexit=term 

기본 신호를 사용 이외에 SIGTERM을 잡으려고

1

CGI.pm은 명령 줄에서 프로그램을 실행하는 데 사용 및 키/값 쌍으로 당신의 CGI 매개 변수를 전달할 수있는 debug mode을 가지고 : 여기에 문제가 재현 최소한의 CGI 스크립트입니다.

save your params to a file에 사용할 수있는 다른 기능이 있으며 나중에 해당 파일을 다시 읽습니다.

내가 한 것은 매개 변수를 파일에 저장하고 브라우저를 통해 프로그램을 실행하는 코드를 추가 한 것입니다. 이것은 또한 브라우저가 올바른 데이터를 보내도록 내 능력을 용이하게합니다.

그런 다음 파일에서 params를 읽도록 코드를 변경하고 다른 모든 디버깅을 수행 할 때까지 필요한만큼 자주 실행합니다.

명령 줄에서 만족스럽고 프로그램을 실행하면 nytprof를 통해 프로그램을 실행하여 항상 무엇을하고 있는지 파악할 수 있습니다. sigexit=1 설정

관련 문제