かなり大きなコードベースを古代のPerl5.005.03CGI環境からmod_perl2に移植したばかりですが、パブリックベータが行われているため、時々発生する問題がいくつかあります。これらは、サーバーを再起動する必要があるまで蓄積されます。
すべてのコードはstrictを使用してコンパイルされますが、以前はコンパイル、実行、および破棄されたCGIスクリプトとして呼び出されていました。これまでに発生した問題:古いスタイルのグローバルファイルハンドル(ではなく)を使用した設定$|
または呼び出し。また、パブリックベータを開始した直後に、ポート80と443でリッスンしている/ bin/tailや/usr/ sbin / sendmailを見つけたため、サーバーの再起動が停止しました。それ以来、純粋なPerlメソッドを使用するようにそのコードを書き直しましたが、その問題はもうありません。STDOUT->autoflush(1);
open(ERRORFILE, $errorfile)
open(my $fh_error, $errorfile)
system()
2つの問題が残っています。1つ目は、ログがmod_perlでいっぱいで、定数が再定義されたことについて不平を言っていることです。
Constant subroutine ModPerl::ROOT::ModPerl::PerlRun::usr_local_..._cgi_forgotpassword::O_CREAT redefined at /usr/lib/perl5/ModPerl/Util.pm line 69.
また、一見コア変数がゴミ箱に入れられることもあります。コアの社内モジュールの1つは、スクリプトのPIDと名前に関する情報をログに記録し、次のような情報を生成します。
20090202-233948-32154:Started script /usr/local/.../cgi/account/renewalcalendar
20090202-233948-32154:Ended script /usr/sbin/apache2
それ以外の場合、プロセスIDは最終的に。になりundef
ます。これはまれで断続的です。
次に、断続的に、ガベージコレクションが開始されないことがあります(おそらく弱参照の問題ですか?しかし、ほとんどの場合、すべてが正常に機能します)。これの最も直接的な症状は、データベースハンドルが開かれ、閉じられないことです。しかし、この問題を深く掘り下げると、標準のPerlハッシュオブジェクトにDBIオブジェクトが格納されており、そのオブジェクトのDESTROY
メソッドが(まれに、断続的に)呼び出されないことが明らかになります。
Debian 5.0(Lenny)、Perl 5.10.0、Apache 2.29、mod_perl 2.0.4、openSSL0.9.8gを実行しています。必要に応じてもっと情報を提供することもできますが、それが基本だと思います。
/ etc / apache2 / sites-enabled / * sitename*であるapacheconfigの重要な部分は、次のとおりです(機密保持の理由で一部編集されています)。
<VirtualHost ...:443>
<Directory />
Options SymLinksIfOwnerMatch
AllowOverride None
</Directory>
<Directory /usr/local/.../cgi>
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>
</VirtualHost>
いくつかのSSL、書き換え、リダイレクトが行われていますが、それは重要なことです。
これは誰にも馴染みがあるように聞こえますか?あるいは、問題をさらにデバッグする方法を誰かが推奨できますか?