function ngx memcmp: ограничение по памяти.

JohnBat26 nginx-forum at nginx.us
Tue Oct 14 09:42:54 UTC 2014


Привет всем.
Использую модуль nginx_push_stream_module для реализации push-механизма
server -> browser.
В определенный момент, когда очередной клиент пытается встать на канал,
начинает возвращаться ошибка: unable to allocate shared memory for channel 

Вот кусок кода в модуле где он [nginx_push_stream_module] пытается выделить
канал:

        channel = ngx_http_push_stream_find_channel(cur->id,
r->connection->log, mcf);
        if (channel == NULL) {
            // channel not found
            ngx_shmtx_unlock(&shpool->mutex);
            ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "push stream
module: unable to allocate shared memory for channel %s", cur->id->data);
            return NGX_HTTP_INTERNAL_SERVER_ERROR;
        }
Как видим, если ngx_http_push_stream_find_channel вернул NULL то вылетает
эта ошибка.

В свою очередь ngx_http_push_stream_find_channel использует nginx функцию
ngx_memn2cmp:

rc = ngx_memn2cmp(id->data, channel->id.data, id->len, channel->id.len);
        if (rc == 0) {
            return channel;
        }
Та в свою очередь использует уже ngx_memcmp в самом nginx:

ngx_memn2cmp(u_char *s1, u_char *s2, size_t n1, size_t n2)
{
    size_t     n;
    ngx_int_t  m, z;

    if (n1 <= n2) {
        n = n1;
        z = -1;

    } else {
        n = n2;
        z = 1;
    }

    m = ngx_memcmp(s1, s2, n);

    if (m || n1 == n2) {
        return m;
    }

    return z;
}

Вопросы:
- в каком случае может не хватить памяти для ngx_memcmp?
- что она точно делает? как я понял, это сравнение памяти.
- сейчас каждый воркер потребляет 30 мб всего 16 воркеров.
- как настроить систему, nginx или и то и то, чтобы ошибка больше не
проявлялалась

В системе еще 6 гб свободно памяти.

Ссылки на код модуля:

https://github.com/wandenberg/nginx-push-stream-module/blob/e802241cad3d5d1c1e63828f5f55a6f8a2f1be1e/src/ngx_http_push_stream_module_subscriber.c#L188

https://github.com/wandenberg/nginx-push-stream-module/blob/e802241cad3d5d1c1e63828f5f55a6f8a2f1be1e/src/ngx_http_push_stream_rbtree_util.c#L37

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,253964,253964#msg-253964



Подробная информация о списке рассылки nginx-ru