On 14.08.2013 14:02, Nick Knutov wrote:

# nginx -V
--with-cc-opt='-DFD_SETSIZE=2048'

массив, заданный FD_SETSIZE используется только в том случае,
когда для обработки соединений используется select()

использовать select() с современными версиями ядер смысла нет.
ведь на Linux nginx всеравно будет использовать epoll
подробности: http://nginx.org/ru/docs/events.html

я даже специально выставляю при сборке nginx

    --without-select_module
    --without-poll_module

чтобы этот лишний код не компилировался внутрь бинарника.
(select и poll нужны на старых ядрах, версий 2.2 и 2.4)

более того, на Linux невозможно изменить FD_SETSIZE,
система всеравно будет использовать значение по-умолчанию 1024

http://www.moythreads.com/wordpress/2009/12/22/select-system-call-limitation/

/usr/include/sys/select.h - здесь задается битовый массив
/usr/include/bits/typesizes.h - здесь задается __FD_SETSIZE

в результате: "An fd_set is a fixed size buffer. Executing FD_CLR or FD_SET with a value of fd that is negative or is equal to or larger than FD_SETSIZE will result in undefined behavior."

Проблема на первом сервере стабильно воспроизводится.

причину проблем может помочь понять отладочный лог:
http://nginx.org/ru/docs/debugging_log.html

параметр --with-debug много оверхеда не добавляет,
но очень удобен при поиске причин различных проблем.

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить