ПРОЕКТЫ 


  АРХИВ 


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



Ну тут я уже не знаю какой выбрать :-). Со спаньём в 0 секунд вроде
выглядит неплохо довольно, к тому же отвечает старому поведению по
ограничению скорости.
Ведь если там было маленькое значение sent и большое значение
limit_rate то я так понимаю как раз получался 0 msec для таймера.

On 4/13/06, Igor Sysoev <is@xxxxxxxxxxxxx> wrote:
> 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.