6

Perl CGI アプリケーションがタイムアウトすることがあり、Apache によって強制終了され、504 Gateway Time-outエラーがブラウザに送信されます。NYTProf を使用してこのアプリケーションのプロファイルを作成しようとしていますが、プロファイル データを読み取ることができません。

 $ 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)

sigexit=1NYTProf オプションを使用しています。問題を再現する最小限の CGI スクリプトを次に示します。

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

sleep 1 while 1;
4

2 に答える 2

7

設定sigexit=1は、NYTProf に次のシグナルをキャッチするように指示します。

INT HUP PIPE BUS SEGV

ただし、CGI スクリプトがタイムアウトすると、Apache はSIGTERM. キャッチする必要がありますSIGTERM

sigexit=term

SIGTERMデフォルトのシグナルに加えてキャッチするには、次を使用します。

sigexit=int,hup,pipe,bus,segv,term
于 2013-12-23T17:26:35.033 に答える
1

CGI.pm にはデバッグ モードがあり、コマンド ラインからプログラムを実行し、CGI パラメータをキーと値のペアとして渡すことができます。

パラメータをファイルに保存し、後でそのファイルを読み込むために使用できる別の機能があります。

私が行ったことは、パラメーターをファイルに保存するコードを追加し、ブラウザーを介してプログラムを実行することです。これにより、ブラウザが正しいデータを送信していることを確認することも容易になります。

次に、ファイルからパラメーターを読み取るようにコードを変更し、他のすべてをデバッグするまで、必要なだけ実行します。

コマンドラインからプログラムを満足のいくように実行できたら、nytprof を介して実行し、何が常にかかっているかを把握できます。

于 2013-12-23T15:55:42.503 に答える