[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