kqueue change list is filled up

Igor Sysoev is at rambler-co.ru
Fri Jul 22 21:46:09 MSD 2005


On Fri, 22 Jul 2005, Serge wrote:

> Игорь, а что значат такие строки в еррор логе:
> 2005/07/22 17:23:44 [warn] 31569#0: *31205 kqueue change list is
> filled up while connecting to upstream, client: 205.252.49.162,
> server: www.server.com, URL: "/test.php", upstream:
> fastcgi://127.0.0.1:1027/test.php, host: "www.server.com"
> Они появляются при попытке стресс-теста с помощью ab c другого сервака
> (ab -c 500 -n 10000). При этом ab сообщает, что около 1% запросов были
> Failed по причине разного размера и ошибок с коннектом. Удивительно,
> что это возникает только при тесте с конкретного сервака. Если
> запустить тот же тест с другого сервера, в той же сети, никаких ошибок
> не происходит.
> Также при локальном тесте ошибок нет.
> версия nginx 0.1.40. Как раз поставил сейчас на новый сервер под FreeBSD 5.4

Это значит, что за время обработки результатов одного вызова kevent()
nginx получил много событий и заполнил весь массив с изменением событий.
Размер этого массива можно изменить директивой

events {
      kqueue_changes  1024;
      ...
}

По умолчанию размер равен 512. Особенно страшного в это нет, просто
в этом случае делается два системных вызова

     kevent(добавить изменения)
     kevent(добавить изменения, получить новые события)

вместо одного

     kevent(добавить изменения, получить новые события)

Что касается ошибок, то нужно смотреть лог nginx'а и параметры FreeBSD.
Возможно, нужно увеличить listen queue, число сокетов, файлов, mbuf'ов.
Что показывают

netstat -m
netstat -Lan
vmstat -z|egrep 'ITEM|socket|Mbuf'

?


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list