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