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