Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ошибка в nginx ?
On Wed, Jul 09, 2008 at 01:03:24PM +0400, Andrei Nigmatulin wrote:
> 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 ошибок вообще не будет. Ну только если
Когда backlog кончается, tcp сокет в этом месте обычно возвращает ECONNREFUSED.
> бэкенду совсем плохо - появтся 504 после таймаута. А то, что tcp медленнее
> локальных сокетов вы сможете заметить только на тысячах или десятках тысяч
> rps. Зачем вам об этом вообще беспокоиться если php все равно съест 99.9%
> cpu ?
>
> > AN> Или отказаться от linux.
> >
> > зачем? при переполнении backlog`а будет точно такое же
> > поведение nginx`а и на других операционных системах...
>
> По крайней мере в BSD такой проблемы нет.
Не уверен.
> > AN> Или каким-то образом ускорить выполнение
> > AN> php скриптов, чтобы backlog не переполнялся.
> >
> > или добавить еще backend`ов, потому что существующие
> > уже не справляются с нагрузкой, или настроить защиту
> > от DDOS-атак, если часть запросов приходит от ботов.
>
> Тоже вариант.
> Или дождаться запуска БАК :-)
--
Игорь Сысоев
http://sysoev.ru
|