FreeBSD + Kqueue/Poll + Libevent

urri nginx-forum на nginx.us
Чт Авг 18 13:33:09 UTC 2011


День добрый!
Сорри за офтоп, но проблему помог
выявить именно Nginx.

Сервер обрабатывает несколько тысяч
запросов в секунду:
nginx -> статические запросы, картинки
           -> бэкенд для динамических
запросов: сервер на С использующий
Libevent

Сервер крутится на FreeBSD 7.2 (проверено и
на 8.1) и использует Kqueue.
Периодически, ~0.1% от общего числа
запросов, Nginx фиксирует ошибку, таймаут
ожидания ответа от бэкенда.
Переключение бэкенд сервера с
использования Kqueue на Poll решает
проблему, Poll справляется с нагрузкой,
но хотелось бы найти проблему и
использовать Kqueue.

Ситуация стабильно воспроизводится
под реальной нагрузкой запросами
пользователей.
Воспроизвести проблему с помощью
нагрузки утилитой http_load (по 1000 запросов
в секунду с нескольких машин)
получается далеко не всегда, не могу
понять в чем разница!?

Изучение логов Libevent в бэкенде (по
проблемным запросам) показывает:
- принимается входящее от Nginx
соединение.
- сокет регистрируется в Kqueue и ожидает
поступления данных для чтения.
- проходит время таймаут (60 секунд), Nginx
закрывает соединение со своей стороны.
- Kqueue сообщает о появлении данных для
чтения и возвращает сокет в Libevent, затем
данные попадают обработчику бэкенд
сервера.

Возможно кто-то сталкивался с таким
странным поведением Kqueue?
Nginx работает стабильно на этом же
сервере, использует Kqueue.
Может быть гуру смогут помочь
разобраться, в чем может быть проблема?
Игорь, Масим?

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,213985,213985#msg-213985



Подробная информация о списке рассылки nginx-ru