Re: Re[6]: Посоветуйте оптимальные настройки

Igor Sysoev is at rambler-co.ru
Thu Apr 13 11:53:08 MSD 2006


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





More information about the nginx-ru mailing list