2010-12-10 12 views
0

HALLO,Mod_perl Segmentation fault

Ich bin ein Apache 2.2.3 auf einem Oracle64-Bit (Red Hat-Klon) ausgeführt wird, und ich bin eine Mauer mit einem Problem zu schlagen. Ich habe ein Programm, das MIME :: Lite verwendet, um Mail über sendmail zu senden (ich entschuldige mich, nicht sicher, welche Versionen von sendmail oder mod_perl ich ausführe, obwohl ich glaube, dass der sendmail-Teil irrelevant ist, wie Sie gleich sehen werden)

gelegentlich apache segfault (11), und tief in das MIME :: Lite-Modul zu graben, ich sehe es in der folgenden Zeile ist:

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

Nun würde man automatisch suspekt send~~POS=TRUNC, aber Wenn ich die gleiche Zeile verwendet habe, um/bin/cat (wie gezeigt) zu verwenden:

Apache noch segfaults.

ich eine strace an die Apache-Prozesse gebunden und sehen Sie die folgenden Schritte aus: (wenn es nicht abstürzt)

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 

Beachten Sie die „SEND sent_by_sendmail“ sind meine Kommentare. Sie können klar sehen, Rohre öffnen. Wenn es zum Absturz kommt, sehen Sie folgendes:

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

Jetzt beachten Sie, dass es nie Rohre. Ich habe GDB versucht und es hat mir wirklich nichts gezeigt.

Schließlich schrieb ich ein einfaches Programm durch mod_perl und regelmäßigen cgi laufen:

print header(); 
print "test"; 

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

Unter mod_perl erfolgreich abgestürzt ist.

Meine Analyse sagt mir, dass es damit zu tun hat, ein Dateihandle zu öffnen, die Verrohrungsfunktion gibt entweder false oder ein beschädigtes Dateihandle zurück.

Ich erhöhte auch die Datei-Deskriptor-Grenze auf 2048, keine Würfel.

Hat jemand irgendwelche Gedanken, wo ich hinschauen sollte? Irgendwelche Gedanken?

Ich schätze die Hilfe

Antwort

0

Ich verbrachte eine lange Zeit ein Problem aufzuspüren, die mit identischen Symptomen begonnen. Ich habe schließlich festgestellt, dass Test :: More mit mod_perl nicht gut spielt. Das Entfernen dieses Moduls aus meinem Code scheint das Problem (bisher!) Gelöst zu haben. Ich bin dem nicht weiter gefolgt, aber ich vermute, dass das Problem tatsächlich in Test :: Builder liegt.