Re: Воркер падает в корку по SIGSEGV (с примером)
Maxim Dounin
mdounin на mdounin.ru
Ср Июн 27 05:02:57 UTC 2018
Hello!
On Fri, Jun 22, 2018 at 11:25:00AM -0400, nickolay wrote:
> Всех приветствую!
>
> Есть простой perl-модуль, который работает под nginx без проблем на древних
> версиях (кажется до 1.7), а на свежих версиях nginx этот модуль приводит к
> тому, что воркеры начинают падать в корку по SIGSEGV.
> Разобрал модуль до мелочей и нашёл, что всё падает на send_http_header().
> Вот пример этого модуля:
>
> package post_download;
>
> use nginx;
> use strict;
>
> sub handler {
> my $r = shift;
>
> $r->send_http_header("text/plain");
> $r->print("OK\n");
>
> return OK;
> }
>
> Воркеры падают не на каждый такой запрос, а после нескольких таких
> запросов.
>
> Подключается этот модуль обычным способом:
> perl_require /etc/nginx/perl/post_download.pm;
>
> 100% баг наблюдается на двух версиях: 1.12.2 и на 1.15.0.
Добавил в конце модуля "1;" (без этого он не может быть загружен,
потому что "did not return a true value" (c) perl), включил
обработку через post_download::handler с помощью
location / {
perl post_download::handler;
}
Прогнал миллион запросов - ничего не падает.
Скорее всего у вас имеет место быть какая-то проблема со сборкой.
Смотрите внимательно, как собирался nginx, правильный ли перл и
библиотеки используются при сборке, совпадает ли компилятор,
которым собирался перл, с тем, которым собирается nginx. Кроме
того, стоит проверить, что perl-модуль nginx собран из тех же
исходников, что и собственно nginx, и при сборке не применялись
какие-либо патчи.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru