при сборке nginx на нашей маниакально сконфигурированной (вне моего
контроля) Slackware при линковке бинарника имеем:
objs/src/event/ngx_event.o(.text+0xdbc): In function `ngx_event_init_conf':
src/event/ngx_event.c:1140: warning: warning: epoll_create is not
implemented and will always fail
objs/src/event/modules/ngx_epoll_module.o(.text+0x1cc): In function
`ngx_epoll_add_event':
src/event/modules/ngx_epoll_module.c:250: warning: warning: epoll_ctl
is not implemented and will always fail
objs/src/event/modules/ngx_epoll_module.o(.text+0x416): In function
`ngx_epoll_process_events':
src/event/modules/ngx_epoll_module.c:402: warning: warning: epoll_wait
is not implemented and will always fail
Это круто. Учитывая, что nginx при configure выполняет epoll_create()
и разрешает его использование только при успешном выполнении.
При этом nginx взлетает, говорит в логе, что использует epoll и даже
вроде бы не очень медленно работает. Но недавно у нас начали
дропаться SYN'ы, и нам советуют попробовать ускорить процесс приёма
новых соединений.
Возможно, в ядре нужно увеличить listen backlog.
Тестовая аппликуха от epoll, как сказал мне хозяин машины, работает
нормально.
Может ли быть так, что nginx действительно получает от epoll_create
код ошибки и тихо даунгрейдится до какого-нибудь select(), прости
господи?
Нет, в этом случае worker просто выходит с кодом 2, и master не запускает
новые. Временное переключение на poll происходит только при переполнении
rtsig.
Игорь Сысоев
http://sysoev.ru