URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7742
[ Назад ]

Исходное сообщение
"Lighttpd, мистический обрыв соединений"

Отправлено Андрей , 20-Июн-13 22:17 
Имеется сервер lighttpd-1.4.32, который был установлен вместо apache.

Стоит на системе freebsd 9.1, обслуживает в среднем 70 запросов в секунду, используется для отдачи статики, запуска cgi-скриптов через mod_cgi, запуска php-скриптов через mod_fastcgi + php_fpm.

Иногда при запросе к серверу (который обрабатывает mod_cgi или mod_fastcgi) происходит обрыв соединения — браузер firefox пишет «Соединение было сброшено», firebug пишет «Статус: aborted», chrome пишет «Ошибка 101 (net::ERR_CONNECTION_RESET): Соединение сброшено».
Это происходит на разных клиентских компьютерах.

Ошибку не получается воспроизвести специально: проще всего её увидеть в самообновляющихся страницах внутри фреймов, которые есть на сайте: если загрузить страницу, и смотреть на самообновляюшиеся фреймы (которые обновляются раз в 20-30 секунд), то в течение примерно 10 минут обязательно соединение сбросится в какой-то момент времени. Специально запросить страницу каким-либо образом, чтобы 100% сгенерировать ошибку - не получилось.

Если рядом включить сервер apache например на 81-м порту, настроенный для отдачи того же контента, что и lighttpd, соединения с браузера к apache ни разу не сбрасываются, то есть при работе apache ошибок нет.
На тестовом сервере lighttpd, без нагрузки, тоже не получилось воспроизвести ошибку.

В логах lighttpd  нет ничего — в error.log пустота, в access.log — только успешно отданные страницы с «200 OK», то есть, сброшенный запрос скорее всего не доходит до логов сервера.

Вывод: наверняка при отправке запроса на сервер lighttpd соединение где-то и кем-то иногда почему-то сбрасывается, но в какой момент и кем — мистика, не понятно. Не придумал, как это вообще возможно отследить.
На apache все работает.
Lighttpd настроен вроде бы стандартно, пытался немного играться с параметрами — например, выключить Keep-alive соединения, не помогло.

Может быть кто сталкивался с такой проблемой, или может подсказать, куда рыть, буду благодарен.
Если нужны конфиги — сообщайте какие, сброшу.


Содержание

Сообщения в этом обсуждении
"Lighttpd, мистический обрыв соединений"
Отправлено Андрей , 20-Июн-13 22:40 
Добавлю еще уточнение

На сервере нагрузки нет, load average все время меньше 1, процессор почти весь свободен (>90%), памяти оперативной хватает, в своп не залазит. При выключенном keep-alive lighttpd обрабатывает максимум 10-30 одновременных запросов, в статусе именно обработки вообще редко больше одного одновременно. Остальные читает запрос или отдаёт ответ. При том что настроен на обработку одновременно более 1000 соединений (про запас).


"Lighttpd, мистический обрыв соединений"
Отправлено name , 21-Июн-13 13:45 
> Добавлю еще уточнение
> На сервере нагрузки нет, load average все время меньше 1, процессор почти
> весь свободен (>90%), памяти оперативной хватает, в своп не залазит. При
> выключенном keep-alive lighttpd обрабатывает максимум 10-30 одновременных запросов,
> в статусе именно обработки вообще редко больше одного одновременно. Остальные читает
> запрос или отдаёт ответ. При том что настроен на обработку одновременно
> более 1000 соединений (про запас).

сравните tcpdump на сервере и клиенте
промежуточные узлы?


"Lighttpd, мистический обрыв соединений"
Отправлено Андрей , 21-Июн-13 23:36 
Запустил tcpdump на сервере. Если я правильно в нём разобрался, у сбршенных коннектов на сервере в tcpdump-е наблюдаю http-запрос, а http-ответа уже нет.
Так же в error.log у lighttpd появилось много строчек типа
2013-06-21 19:00:04: (connections.c.137) (warning) close: 27 Connection reset by peer

Но похоже вариант решения проблемы нашелся.
Все глюки проявлялись, когда KeepAlive соединения в lighttpd были выключены, либо были сконфигурированы по умолчанию:
server.max-keep-alive-requests = 16
server.max-keep-alive-idle = 5

Я изменил значения на:
server.max-keep-alive-requests = 100
server.max-keep-alive-idle = 20

после этого глюки вроде бы пропали
Но послежу ещё побольше времени, чтобы быть точно уверенным