Re: poll() timeout в PHP-FPM при получении запросов от Nginx
On Wed, Nov 20, 2013 at 12:03:50PM +0300, Bogdan wrote:
> > On Tue, Nov 19, 2013 at 11:58:33PM +0300, Bogdan wrote:
> > > Т.е. непонятно по какой причине poll() зависает на 5 секунд блокируя
> > работу
> > > интерпретатора.
> >
> > Скорее всего, по той причине, что никаких данных по сети не приходит.
>
> Не совсем тут понятно, что значит "никаких данных по сети не приходит" -
> т.е. удалённая сторона, в данном случае nginx, установила tcp-соединение,
> но данных в него не послала?
Может быть и так, но возможно данные посылались и потерялись где-то
по пути... Нужно не фантазировать а опираться на факт, что poll() вышел
на таймаут, значит, скорее всего на хосте-приёмнике данных не было.
И самый быстрый способ проверить это -- посмотреть дамп трафика.
После чего уже понятно, ядро виновато или локальная сеть.
> > Вероятность проблемы может быть весьма высокой, например
> > > 1/60, что при условии получения 1000-1500 запросов в секунду очень
> > > болезненно.
> > > Подскажите, куда дальше копать?
> >
> > Убедиться, что данных действительно нет, если в этом сомневаетесь.
> > Т.е. tcpdump в руки и искать эту коннекцию.
>
> Ну поискать-то в этом потоке будет весьма сложно, потому я и интересовался
Что сложного в том, чтобы найти в дампе коннекции с нужными номерами портов?
Просто указываете tcpdump'у номер порта. Там ещё отметки времени есть.
> Я планировал посмотреть ретрансмиты на сервере который выполняет nginx и
> шлёт запросы к PHP-FPM, но т.к. tcp-счётчиков для интерфейсов видимо нет,
> буду использовать снифер.
Наличие потерь и ретрансмиссий в сети легко детектируется по опции SACK.
Хотя конкретно этот случай (потеря на старте коннекции) так не поймаешь.
--
Eugene Berdnikov
Reply to: