ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: error code=499



Bogun Dmitriy wrote:
В Пнд, 13/04/2009 в 11:56 +0400, Anton Yuzhaninov пишет:
>> Помогите разобраться.
>> Пользователи стали жаловаться на проблемы с доступу к одному их >> форумов(ipb) живущему на апаче за nginx'ом.
>>
>> Из "странностей" в access логах нашел код возврата 499. И вот такое >> сообщение в error логе "client closed prematurely connection, so >> upstream connection is closed too while sending request to upstream", >> на соответсвующую запись из access лога.
>>
> ...
>> У меня есть всего 2 гипотезы:
>> Проблема на уровне сетевого интерфейса. Хотя сеть нагружена примерно >> на половину из возможного 50MB/s. >> Проблема в самом nginx'е при определенном уровне нагрузки или >> количестве соединений.
>>
>> Подскажите в какую сторону смотреть для прояснения ситуации.
>>
> Скорее всего проблема в самом форуме. Ибо ошибка 499 обозначает, что > клиент не дождался ответа. > > "while sending request to upstream" говорит о том, что nginx даже не успел передать запрос на upstream. Одна из возможных причин таких сообщений - клиент кликнул в браузере на одну ссылку, а потом сразу же на другую (при этом запрос на первую ссылку закрывается).
То что nginx "видит" закрытие клиентского соединения я понимаю, но вот причину этого закрытия - не понимаю. Как один из вариантов - "пользователь нажал отмена", берем на вооружение, но что если он ее не нажимал? Мне прислали screenshot, на котором вот такой запрос с 499-ым ответом в логе, и браузер (chrom) говорит о "Ошибка 2 (Net::ERR_FAILED): неизвестная ошибка" - из этого можно предположить, что браузер все же ожидал что-то получить в ответ(проваливается гипотеза отмены загрузки), но соединение было потеряно.

Возможно поможет запись в tcpdump всего трафика.
На современном железе это вполне возможно.

сделать скрипт запускающий в бесконечном цикле:
tcpdump -pn -w /path/to/http_`date +'%F_%H-%M-%S'`.dump -c 1000000 'port 80 or 
icmp'

в access_log nginx писать $remote_port

Далее для строчек с 499 кодом, можно по времени, ip, номеру порта найти эту коннекцию в файле с дампом трафика и посмотреть. Возможно это что то прояснит.

--
 Anton Yuzhaninov



 




Copyright © Lexa Software, 1996-2009.