Ошибка сегментации mod_perl - PullRequest
       9

Ошибка сегментации mod_perl

0 голосов
/ 11 декабря 2010

HI,

Я запускаю apache 2.2.3 на Oracle64-bit (клон Red Hat), и у меня возникает проблема с кирпичной стеной.У меня есть программа, которая использует MIME :: Lite для отправки почты через sendmail (я извиняюсь, не уверен, какие версии sendmail или mod_perl я использую, хотя я верю, что часть sendmail не имеет значения, как вы увидите через мгновение)

Иногда apache вызывает segfault (11) и копается вглубь модуля MIME :: Lite, я вижу, что он находится в следующей строке:

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 он успешносбой.

Мой анализ говорит мне, что это связано с попыткой открыть дескриптор файла, функция конвейера возвращает либо ложный, либо поврежденный дескриптор файла.

Я также увеличил дескриптор файлаограничение до 2048, без кубиков.

У кого-нибудь есть мысли о том, куда мне смотреть?Есть мысли?

Я ценю помощь

1 Ответ

0 голосов
/ 22 июля 2011

Я потратил много времени на поиск проблемы, которая начиналась с идентичных симптомов. В конце концов я обнаружил, что Test :: More не очень хорошо работает с mod_perl. Удаление этого модуля из моего кода, похоже, решило проблему (пока!). Я не стал вдаваться в подробности, но я подозреваю, что проблема на самом деле заключается в Test :: Builder.

...