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 на qwarta.ru
QWARTA
Подробная информация о списке рассылки nginx-ru