[emerg] 6428#0: malloc() 3053187144 bytes failed (12: Cannot allocate memory)

Maxim Dounin mdounin на mdounin.ru
Пт Мар 25 16:47:54 MSK 2011


Hello!

On Fri, Mar 25, 2011 at 11:53:47AM +0300, Eugene Batogov wrote:

> Приветствую всех.
> Возникли две интересные проблемы, а точнее записи в nginx.log:
> ...
> 2011/03/18 17:34:46 [alert] 6431#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:34:46 [alert] 6429#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:34:46 [alert] 6429#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:35:16 [alert] 6429#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:35:16 [alert] 6429#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:35:46 [alert] 6433#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:35:46 [alert] 6433#0: ngx_slab_free(): chunk is already free
> 2011/03/18 17:36:16 [crit] 6436#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6436#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6429#0: ngx_slab_alloc() failed: no memory
> 2011/03/18 17:36:16 [crit] 6429#0: ngx_slab_alloc() failed: no memory
> ....
> Почему появляются эти сообщения?
> Кто их инициатор?

Функции ngx_slab_free() и ngx_slab_alloc() используются для работы 
с разделяемой памятью.

Сообщение о "no memory" от ngx_slab_alloc() может быть не 
фатальным (просто память в соответствующей зоне кончилась).

Сообщение "ngx_slab_free(): chunk is already free" явно указывает 
на проблему, вероятнее всего - на некорректную работу с 
разделяемой памятью в стороннем модуле.  Подозреваю, что под 
"сторонним модулем" в данном случае следует понимать 
nginx_http_push_module.

Более подробную информацию можно попытаться получить включив 
debug log[1].

[1] http://wiki.nginx.org/Debugging

> и вторая:
> ...
> 2011/03/18 17:30:16 [emerg] 6428#0: malloc() 3053187144 bytes failed (12:
> Cannot allocate memory)
> ...
> Под что nginx выделяет так много памяти?
> Как это можно узнать?

Аналогично - включать debug log.

[...]

> И еще возникла проблема с остановом nginx после использования
> nginx_http_push_module.
> Он очень долго останавливается, такое ощущение, что ждет окончания
> таймаутов.

Плавное завершение рабочих процессов предполагает, что nginx 
дожидается окончания всех запросов, и только после этого выходит.  
Так что ничего удивительного тут нет.

> --------------
> Наши окружения:
> -----------
> nginx version: nginx/0.7.65

[...]

> nginx version: nginx/0.8.53

Я бы рекомендовал обновиться как минимум до последней версии 
stable, 0.8.54.

Maxim Dounin



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