2010-12-10 14 views
0

HI、mod_perlのセグメンテーションフォールト

私はOracle64ビット(Red Hatのクローン)上でApache 2.2.3を実行していると私は、問題とレンガの壁に当たっています。私はMIME :: Liteを使ってsendmailを通してメールを送信するプログラムを持っています(私は謝罪しています、sendmailのバージョンやmod_perlが何かを確認していませんが、sendmailの部分は無関係だと思います)機会に

、Apacheは(11)セグメンテーションフォールトし、MIME :: Liteのモジュールに深く掘り、私はそれが次の行にある参照してください。今

open SENDMAIL, "|$sendmailcmd" or Carp::croak "open |$sendmailcmd: $!\n"; (this is in MIME::Lite) 

、1が自動的に容疑者のsendmailをだろうが、/bin/catと同じ行を使用した場合(図のように):

open SENDMAIL, "|/bin/cat" 

のapacheはまだsegfaults。

私は、Apacheのプロセスにstraceのを添付し、以下を参照してください。 (それがクラッシュしていない場合)

12907 write(2, "SENDMAIL send_by_sendmail 1\n", 28) = 28 
12907 write(2, "SENDMAIL /usr/lib/sendmail -t -o"..., 40) = 40 
12907 pipe([24, 26])     = 0 
12907 pipe([28, 29])     = 0 
12907 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,  child_tidptr=0x2b4bcbbd75d0) = 13186 

注「SENDMAIL sent_by_sendmail」私のコメントです。パイプが開いているのがはっきりと分かります。それがクラッシュすると、次のように表示されます:

10805 write(2, "SENDMAIL send_by_sendmail (for y"..., 40) = 40 
10805 --- SIGSEGV (Segmentation fault) @ 0 (0) --- 

これで、パイプがないことに気付きました。私はGDBを試しましたが、実際には何も表示されていません。それが正常にクラッシュしたmod_perlの下で

print header(); 
print "test"; 

open SENDMAIL, "|/bin/cat" or Carp::croak "open |sendmailcmd: $!\n"; 
print SENDMAIL "foodaddy"; 
close SENDMAIL; 
print "test done <br/>"; 

は最後に、私はmod_perlのと定期的なCGIを介して実行するための簡単なプログラムを書きました。

私の分析では、ファイルハンドルを開こうとする必要があると言われています。パイプ関数は、falseまたは破損したファイルハンドルを返します。

また、ファイル記述子の制限を2048(サイコロなし)に増やしました。

私はどこを見なければならないのでしょうか?何かご意見は?

私はちょうど同じ症状を始め、問題を追跡に長い時間を費やしヘルプ

答えて

0

を感謝しています。私は最終的にTest :: Moreがmod_perlでうまく動かないことを発見しました。私のコードからこのモジュールを削除すると、問題は解決したようです(これまでのところ!)。私はこれを深く追っていませんでしたが、問題は実際にはTest :: Builderにあると思われます。

関連する問題