Thank you for reading this post, don't forget to subscribe!
в логе ошибок веб-сервера Nginx появились сообщения вида
1 2 |
<span class="hljs-number">2019</span>/<span class="hljs-number">11</span>/<span class="hljs-number">22</span> <span class="hljs-number">08</span>:<span class="hljs-number">21</span>:<span class="hljs-number">02</span> [crit] <span class="hljs-number">29098</span><span class="hljs-meta">#29098: *174583882 open() <span class="hljs-meta-string">"/var/www/public/blackfriday/img/tabs/img4.png"</span> failed (24: Too many open files), client: 176.113.144.142, server: <a class="vglnk" href="http://example.com/" rel="nofollow">example.com</a>, request: <span class="hljs-meta-string">"GET /blackfriday/img/tabs/img4.png HTTP/2.0"</span>, host: <span class="hljs-meta-string">"<a class="vglnk" href="http://example.com/" rel="nofollow">example.com</a>"</span></span> |
Смотрим текущие soft
/hard
лимиты файловых дескрипторов и открытых файлов для основного (master) процесса Nginx:
1 2 3 |
cat /proc/$(cat /<span class="hljs-keyword">var</span>/run/nginx.pid)/limits|grep open.files Max open files <span class="hljs-number">1024</span> <span class="hljs-number">4096</span> files |
и для дочерних (worker) процессов:
1 2 3 4 5 |
ps --ppid $(cat /var/run/nginx.pid) -o %p|sed <span class="hljs-string">'1d'</span>|xargs -I{} cat /proc/{}/limits|<span class="hljs-keyword">grep</span> open.files Max <span class="hljs-keyword">open</span> files <span class="hljs-number">1024</span> <span class="hljs-number">4096</span> files Max <span class="hljs-keyword">open</span> files <span class="hljs-number">1024</span> <span class="hljs-number">4096</span> files Max <span class="hljs-keyword">open</span> files <span class="hljs-number">1024</span> <span class="hljs-number">4096</span> files |
Открываем на редактирование конфигурационный файл /etc/security/limits.conf
и вставляем в него следующие строки:
1 2 3 4 |
... nginx soft nofile 10000 nginx hard nofile 30000 |
В конфигурациооный файл nginx.conf
добавляем следующую строку:
1 2 3 4 |
... worker_rlimit_nofile 30000; ... |
Проверим конфигурацию веб-сервера на предмет ошибок и перечитаем конфиг:
1 2 |
nginx -t && nginx <span class="hljs-_">-s</span> reload |
Проверим новые лимиты, установленные для дочерних процессов веб-сервера Nginx:
1 2 3 4 5 |
ps --ppid $(cat /var/run/nginx.pid) -o %p|sed <span class="hljs-string">'1d'</span>|xargs -I{} cat /proc/{}/limits|<span class="hljs-keyword">grep</span> open.files Max <span class="hljs-keyword">open</span> files <span class="hljs-number">10000</span> <span class="hljs-number">30000</span> files Max <span class="hljs-keyword">open</span> files <span class="hljs-number">10000</span> <span class="hljs-number">30000</span> files Max <span class="hljs-keyword">open</span> files <span class="hljs-number">10000</span> <span class="hljs-number">30000</span> files |
Новые лимиты могут примениться не ко всем дочерним процессам веб-сервера, в таком случае необходимо перезапустить nginx
с помощью команды:
1 |
<span class="hljs-attribute">service</span> nginx restart |