2010-12-10 30 views
0

嗨,mod_perl分段錯誤

我在一個Oracle64位(紅帽克隆)上運行apache 2.2.3,並且遇到一個磚牆問題。我有一個利用MIME :: Lite通過sendmail發送郵件的程序(我很抱歉,不確定我運行的sendmail或mod_perl的版本是什麼,儘管我確實相信sendmail部分是無關緊要的,正如你稍後會看到的那樣)

有時,Apache將段錯誤(11),並深挖的MIME ::精簡版模塊,我看到它是以下行:

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

現在,一會就自動嫌疑sendmail,但它如果我在同一行使用/ bin/cat(如圖所示):

open SENDMAIL, "|/bin/cat" 

apache仍然segfaults。

我連着一個strace的apache的進程,看到以下內容: (當它不會崩潰)

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和定期CGI運行:

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它已經成功地墜毀。

我的分析告訴我,它試圖打開文件句柄,管道函數返回false或損壞的文件句柄。

我也將文件描述符限制增加到2048,沒有骰子。

有沒有人有什麼想法,我應該看看?有什麼想法嗎?

我很感謝幫助

回答

0

我剛剛花了很長時間來追蹤以相同症狀開始的問題。我最終發現Test :: More與mod_perl不兼容。從我的代碼中刪除此模塊似乎已經解決了這個問題(到目前爲止!)。我沒有更深入地瞭解這一點,但我懷疑問題實際上在於Test :: Builder。