error code=499

Anton Yuzhaninov citrin at citrin.ru
Mon Apr 13 14:36:38 MSD 2009


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





More information about the nginx-ru mailing list