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