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