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

Дугин Сергей drug на qwarta.ru
Вт Янв 11 02:54:36 UTC 2022


Здравствуйте, 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/
нет ничего


> [...]

>>  cat /etc/os-release
>> NAME="CloudLinux"
>> VERSION="7.9 (Boris Yegorov)"
>> ID="cloudlinux"
>> 
>> Linux 3.10.0-962.3.2.lve1.5.42.el7.x86_64 #1 SMP Mon Nov 9 08:11:18 EST 2020 x86_64 x86_64 x86_64 GNU/Linux
>> 
>> 
>> top - 17:33:50 up 12:18,  1 user,  load average: 13.88, 13.09, 12.50
>> Tasks: 909 total,   7 running, 901 sleeping,   0 stopped,   1 zombie
>> %Cpu(s): 12.1 us,  4.8 sy,  0.1 ni, 82.2 id,  0.3 wa,  0.0 hi,  0.6 si,  0.0 st
>> KiB Mem : 13182188+total,  4598376 free, 75250656 used, 51972864 buff/cache
>> KiB Swap: 10077298+total, 96888000 free,  3884988 used. 44158760 avail Mem
>> 
>>   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
>> 12785 root      20   0   35.0g  34.0g   2440 S  28.0 27.1  10:43.40 nginx
>> 12807 root      20   0   14.4g  13.4g   2448 S  29.6 10.6   4:22.15 nginx
>> 12805 root      20   0 2904776   1.8g   2588 S   3.0  1.4   1:10.02 nginx
>> 12802 root      20   0 2880556   1.8g   2432 S   2.0  1.4   0:52.17 nginx
>> 12799 root      20   0 2859616   1.8g   2452 S   1.6  1.4   0:31.47 nginx

> Судя по всему, растут те процессы, которые собственно занимаются 
> обработкой соединений: на современных линуксах распределение 
> соединений между рабочими процессами может быть сильно 
> неравномерным, лечить проще всего включением 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
и так далее

При запуске писало 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 гиг памяти при старте.

Еще есть вот этот параметр
client_max_body_size 128m;


-- 
С уважением,
 Дугин Сергей                          mailto:drug at qwarta.ru
 QWARTA



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