ошибка в nginx ?

Andrei Nigmatulin andrei.nigmatulin at gmail.com
Wed Jul 9 13:03:24 MSD 2008


On Wednesday 09 July 2008 11:58, Gena Makhomed wrote:
> On Wednesday, July 9, 2008 at 0:50:09, Andrei Nigmatulin wrote:
> >> если я все правильно понимаю - в той ситуации когда у backend`а
> >> уже закончился backlog - nginx в любом случае вернет ошибку 502 ?
>
> AN> Да.
>
> >> а какой при этом будет возвращен код ошибки из ядра,
> >> EINPROGRESS или EAGAIN - никакой особой роли не играет,
> >> и эту разницу можно будеть увидеть только по debug-логу?
>
> AN> Да. Тут в общем-то самое полезное, что может сделать nginx -
> AN> сообщить о том, что ошибка произошла в момент подключения.
> AN> Так как из "(134: Transport endpoint is not connected)
> AN> while sending request to upstream" сложно понять,
> AN> что на самом деле произошло.
>
> возможно это такой подход - не заниматься интерпретацией сообщений
> об ошибках, а только буквально сообщать в лог о том, что произошло.
> аналогичный случай с другой ошибкой - http://sysoev.ru/nginx/docs/faq.html

Нет, это не аналогичный случай. Тут ошибка ясна уже сразу после connect(), но 
попадает в лог не она, а другая, наведенная.

> >> возвращаясь к тому исходному сообщению
> >> http://groups.google.com/group/highload-php-ru/msg/a5a2883173f56f5d
> >> - получается, что тут нет ошибки в ядре linux, которую можно исправить
> >> и получить лучший результат (например, меньше ошибок 502 на клиенте) ?
>
> AN> Можно увеличить somaxconn. По опыту, многим помогает.
>
> это наверное единственный способ, если есть "всплески" запросов,
> и задержка с отдачей ответа будет лучше, чем возврат 502 ошибки.
>
> AN> Или перейти на tcp.
>
> а чем в такой ситуации может помочь переход на tcp?
> в пределах localhost`а tcp ведь работает медленнее,
> чем unix sockets - будет только больше 502 ошибок?

tcp сокет вернет EINPROGRESS в этом месте, а значит соединение все-таки 
случится, но позже. В итоге 502 ошибок вообще не будет. Ну только если 
бэкенду совсем плохо - появтся 504 после таймаута. А то, что tcp медленнее 
локальных сокетов вы сможете заметить только на тысячах или десятках тысяч 
rps. Зачем вам об этом вообще беспокоиться если php все равно съест 99.9% 
cpu ?

> AN> Или отказаться от linux.
>
> зачем? при переполнении backlog`а будет точно такое же
> поведение nginx`а и на других операционных системах...

По крайней мере в BSD такой проблемы нет.

> AN> Или каким-то образом ускорить выполнение
> AN> php скриптов, чтобы backlog не переполнялся.
>
> или добавить еще backend`ов, потому что существующие
> уже не справляются с нагрузкой, или настроить защиту
> от DDOS-атак, если часть запросов приходит от ботов.

Тоже вариант.
Или дождаться запуска БАК :-)


-- 
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take


More information about the nginx-ru mailing list