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

Maxim Dounin mdounin at mdounin.ru
Tue Oct 14 10:00:35 UTC 2014


Hello!

On Tue, Oct 14, 2014 at 05:42:54AM -0400, JohnBat26 wrote:

> Привет всем.
> Использую модуль 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 то вылетает
> эта ошибка.

Судя по коду, текст ошибки - копипаста из другого места и/или 
следствие замысловатого хода мысли автора модуля (что-нибудь вроде 
"нет нужного id, зачит мы его удалили, значит у нас кончалась 
память и мы его удалили").

Правильная причина указана в комментарии - канал с соответствующим 
идентификатором не найден.

[...]

> Вопросы:
> - в каком случае может не хватить памяти для ngx_memcmp?
> - что она точно делает? как я понял, это сравнение памяти.

Да, это сравнение памяти.  "Не хватить памяти" для сравнения - не 
может, по определению.  См. выше.

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

Беглый взгляд на код позволяет предположить, что размер 
разделяемой памяти, которую использует модуль, настраивается с 
помощью директивы push_stream_shared_memory_size.  Где-то должна 
быть и документация, вероятно.

-- 
Maxim Dounin
http://nginx.org/



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