ПРОЕКТЫ 


  АРХИВ 


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: Re[6]: Посоветуйте оптимальные настройки



On Thu, 13 Apr 2006, ForJest wrote:

Игорь, посмотрите, почему зависает, если указать 2000 вместо 1000 при
3000 limit rate. Я полагаю что это поможет устранить баг с зависанием
некоторых сессий наших клиентов.

Потому что послано меньше, чем нужно: c->sent <= to_send

Есть два варианта решения:

1) первый всё-таки добавлять нулевой таймер и тогда это соединение
   будет обработано при следующем kevent()/epoll/etc

2) или послать ещё, не отходя от кассы:

------------
    for ( ;; ) {

        chain = c->send_chain(c, r->out, r->limit_rate);

        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
                       "http write filter %p", chain);

        if (chain == NGX_CHAIN_ERROR) {
            c->error = 1;
            return NGX_ERROR;
        }

        for (cl = r->out; cl && cl != chain; /* void */) {
            ln = cl;
            cl = cl->next;
            ngx_free_chain(r->pool, ln);
        }

        r->out = chain;

        if (r->limit_rate) {
            to_send = r->limit_rate * (ngx_time() - r->start_time);

            if (c->sent <= to_send) {
                continue;
            }

            c->write->delayed = 1;
            ngx_add_timer(r->connection->write,
                    (ngx_msec_t) ((c->sent - to_send) * 1000 / r->limit_rate));
        }

        break;
    }
------------

Я пока думаю, какой вариант выбрать.


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



 




Copyright © Lexa Software, 1996-2009.