Re: nginx есть десятки гигабат памяти и сервер уходит в swap

Maxim Dounin mdounin на mdounin.ru
Вт Янв 11 13:09:07 UTC 2022


Hello!

On Tue, Jan 11, 2022 at 05:54:36AM +0300, Дугин Сергей wrote:

> Здравствуйте, Maxim.
> 
> Вы писали 10 января 2022 г., 22:07:16:
> 
> > А что при этом в конфиге?  В частности, worker_connections и 
> > всевозможные буфера (client_header_buffer_size, 
> > large_client_header_buffers, client_body_buffer_size, 
> > proxy_buffer_size, proxy_buffers, output_buffers и так далее)?  
> > Если включён HTTP/2 - то ещё и http2_max_concurrent_streams.
> Эти параметры все по дефолту.
> HTTP/2 - нет
> http2_max_concurrent_streams - тоже нет
> 
> > Отдельно интересно нет ли в конфиге сторонних модулей.  А если 
> > есть, то воспроизводится ли проблема без них.
> Сторонних модулей нет и не ставил
> в папке /usr/lib64/nginx/modules/
> нет ничего

[...]

> > Судя по всему, растут те процессы, которые собственно занимаются 
> > обработкой соединений: на современных линуксах распределение 
> > соединений между рабочими процессами может быть сильно 
> > неравномерным, лечить проще всего включением accept_mutex'а 
> > (https://trac.nginx.org/nginx/ticket/2285).
> Сделал worker_processes auto;
> форкеров стало ровно столько сколько ядер и теперь все форкеры кушают примерно одинаково:
>  6310 root      20   0 4494660   3.3g   2456 S   0.0  2.6   0:01.82 nginx
> 15109 root      20   0 4494660   3.3g   2452 S   2.3  2.6   0:01.32 nginx
> 15133 root      20   0 4494660   3.3g   2444 S   0.3  2.6   0:00.89 nginx
>  6216 root      20   0 4494660   3.3g   2420 S   0.0  2.6   0:00.65 nginx
>  6267 root      20   0 4494660   3.3g   2412 S   0.0  2.6   0:00.99 nginx
> 15085 root      20   0 4494660   3.3g   2344 S   1.6  2.6   0:00.94 nginx
>  6297 root      20   0 4494660   3.3g   2336 S   0.0  2.6   0:01.53 nginx
> 15097 root      20   0 4494660   3.3g   2332 S   2.3  2.6   0:01.09 nginx
> 14858 root      20   0 4494660   3.3g   2256 S   0.0  2.6   0:00.40 nginx
> 15045 root      20   0 4494660   3.3g   2300 S   0.7  2.6   0:00.54 nginx
> 15026 root      20   0 4494660   3.3g   2288 S   0.7  2.6   0:00.55 nginx
> и так далее

В смысле - после включения accept_mutex'а?

> При запуске писало 1.7g, сейчас уже 3.3g
> то есть при запуске потребляет 48*1.1=81,6g памяти,
> а сейчас уже 158,4G и сервер уже очень бодро свапится. 
> 
> 
> > Почему растут - отдельный вопрос.  Для начала, наверное, стоит 
> > посмотреть, до какого размера процессы могут расти по памяти в 
> > соответствии с текущими настройками.  Грубая оценка максимального 
> > потребления памяти одним рабочим процессом - worker_connections * 
> > <сумма всех буферов>.  Если она не превышена - то вопрос, скорее, 
> > в настройках, не соответствующих имеющемуся объёму памяти.  Если 
> > превышена - то имеет смысл разбираться дальше.
> 
> worker_connections поставил по дефолту
> буфера тоже все по дефолту
> worker_processes сделал 6
> 
> перезапустил вижу по top такое:
> USER     PID   %CPU %MEM VSZ     RSS     TTY   STAT START   TIME COMMAND
> root     15962  4.3  2.6 4477008 3467940 ?     S    05:42   0:01 nginx: worker process
> root     15954  1.6  2.6 4477008 3467916 ?     S    05:42   0:00 nginx: worker process
> root     15972  1.4  2.6 4477008 3467876 ?     S    05:42   0:00 nginx: worker process
> root     15982  0.4  2.6 4477008 3467720 ?     S    05:42   0:00 nginx: worker process
> root     15993  0.2  2.6 4477008 3467588 ?     S    05:42   0:00 nginx: worker process
> root     44803 15.8  2.6 4477004 3467200 ?     Ss   05:39   0:30 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
> root     16005  0.1  2.6 4477008 3465784 ?     S    05:42   0:00 nginx: worker process
> 
> В итоге 6 процессов кушают 3467940*6 около 20 гиг памяти при старте.

Занятно.  А можно посмотреть конфиг полностью?  В идеале - сразу 
вывод "nginx -T", но можно выкинуть/отфильтровать имена серверов и 
прочую приватную информацию.

-- 
Maxim Dounin
http://mdounin.ru/



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