Так случилось, что мне нужно писать довольно в большое число
лог-файлов с буферизацией.
Сразу после запуска nginx выделяет себе порядка 45 мегабайт памяти под
буферы (т. е. с выключенной буферизацией размер каждого воркера
показывается на 45 меньше). После того как я первый раз делаю HUP -
размер памяти скачкообразно вырастает примерно в два раза, и далее
плавно растет (по 100-150 килобайт) после каждого HUP.
Если для всех этих логов выключить буферы - то столько памяти сразу не
расходуется, однако прирост по 100-150 кб после HUP все равно
присутствует.
Случилось это у меня на Linux с ядром 2.6, однако проверил - на
FreeBSD 6 - примерно так же утекает память.
Увеличение в два раза происходит из-за того, что основной процесс
во время обработки новой конфигурации ещё держит в памяти старую
на тот случай, если с новой будут проблемы. После успешного тестирования
новой старая освобождается, но системный malloc не всегда может вернуть
эту память ядру.
Мелкий прирост (100-150К) лучше смотреть не на рабочих процессах,
а на основном, так как его возможные утечки наследуются рабочими.
Если убрать буфера и послать 10-20 раз подряд -HUP мастеру память
всё так же стабильно увеличивается или устаканиватеся на каком-то
уровне ?
Что касается большого числа буферов, то я не думаю, что имеет
смысл включать буферизацию для всех логов.
Игорь Сысоев
http://sysoev.ru