<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">чт, 25 июн. 2020 г. в 19:59, Gena Makhomed <<a href="mailto:gmm@csdoc.com">gmm@csdoc.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 25.06.2020 17:23, Maxim Dounin wrote:<br>
<br>
>>> в этом месте вы думаете, что воркер сам себе проставил такой лимит на<br>
>>> количество файлов.<br>
>><br>
>>> посмотрите в /proc/<pid>/limits , действительно ли там значения, которые вы<br>
>>> ожидаете или нет<br>
>>> у нас было, что systemd применял свои лимиты поверх<br>
>><br>
>> # cat /proc/205/cmdline<br>
>> nginx: worker process<br>
>><br>
>> # grep "Max open files" /proc/205/limits<br>
>> Max open files          262144               262144               files<br>
> <br>
> А у master-процесса что?<br>
<br>
# cat /proc/182/cmdline<br>
nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf<br>
<br>
# grep "Max open files" /proc/182/limits<br>
Max open files           1024                 262144               files<br>
<br>
С помощью директив конфига nginx, насколько я понимаю,<br>
1024 нельзя увеличить до какого-нибудь большего значения.<br>
<br>
с помощью systemctl edit nginx сделал<br>
<br>
/etc/systemd/system/nginx.service.d/override.conf<br>
<br>
[Service]<br>
LimitNOFILE=infinity<br>
<br>
так что теперь, после перезапуска у мастера такие параметры:<br>
<br>
# cat /proc/690/cmdline<br>
nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf<br>
<br>
# grep "Max open files" /proc/690/limits<br>
Max open files          262144               262144               files<br>
<br>
И nginx теперь нормально запускается даже при worker_processes 128;<br>
<br>
Спасибо!<br>
<br>
> Если я правильно понимаю код ядра линукса, ETOOMANYREFS означает,<br>
> что количество одновременно отправляемых файловых дескрипторов<br>
> превышает лимит на количество дескрипторов в отправляющем<br>
> процессе, в данном случае - в мастере, ибо никто больше файловые<br>
> дескрипторы с помощью sendmsg() не шлёт.<br>
<br>
> Ну и отвечая на исходный вопрос про "насколько критична эта<br>
> ошибка": приведённая ошибка как минимум означает, что система<br>
> общения между мастером и рабочими процессами больше не работает.<br>
> То есть отвечать на запросы nginx будет, а скажем reload сделать -<br>
> уже нормально не сможет.  То есть приблизительно как и со всеми<br>
> ошибками уровня alert: "что-то развалилось и непредсказуемо<br>
> глючит, сделайте что-нибудь".<br>
<br>
Если я правильно понял Ваш ответ - nginx шлет файловые дескрипторы<br>
из мастера в воркеры только в процессе старта и в процессе релоада,<br>
то есть, эта ошибка<br></blockquote><div><br></div><div>насколько я помню, в принципе разная работа с дескрипторами может быть, например, если логи открыты в буферизированном варианте.</div><div>(если небуферизированные, то воркер открывает, записывает и закрывает. если буферизированные, то дескриптор хранится в мастере)</div><div><br></div><div><br></div><div>интересно посмотреть, что у вас в /proc/<master>/fd , это файлы открытые мастером<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
sendmsg() failed (109: Too many references: cannot splice)<br>
<br>
не должна повториться в дальнейшем, в процессе работы nginx<br>
под большой нагрузкой, если в процессе запуска и релоада<br>
подобных ошибок не было.<br>
<br>
P.S.<br>
<br>
На том сервере процессор AMD EPYC 7502P 32-Core Processor<br>
так что 32 worker-процесса nginx вполне должно быть достаточно,<br>
по количеству физических ядер и без правки LimitNOFILE для мастера.<br>
<br>
Но при настройке worker_processes auto; глюки есть уже сейчас,<br>
потому что в auto считаются виртуальные а не физические ядра.<br>
<br>
Со стороны nginx этот глюк никак нельзя обойти/устранить,<br>
чтобы все работало при настройке worker_processes auto;<br>
без ручной правки LimitNOFILE через systemctl edit nginx<br>
на сервере с процессором AMD EPYC 7502P 32-Core Processor?<br>
<br>
-- <br>
Best regards,<br>
  Gena<br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div></div>