Забагато відкритих файлів з nginx, здається, не може підвищити ліміт


22

Сервер - Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64).

nginx є nginx / 1.2.6.

Я працюю над цим вже кілька годин, тож ось що я отримую і ось що я зробив.

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:05 [crit] 3426#0: accept4() failed (24: Too many open files)

Nginx працює:

geuis@localhost:~$ ps aux | grep nginx
root      3422  0.0  0.0  39292   380 ?        Ss   21:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    3423  3.7 18.8 238128 190848 ?       S    21:30   0:13 nginx: worker process      
nobody    3424  3.8 19.0 236972 192336 ?       S    21:30   0:13 nginx: worker process      
nobody    3426  3.6 19.0 235492 192192 ?       S    21:30   0:13 nginx: worker process      
nobody    3427  3.7 19.0 236228 192432 ?       S    21:30   0:13 nginx: worker process      
nobody    3428  0.0  0.0  39444   468 ?        S    21:30   0:00 nginx: cache manager process

Змінені м'які / жорсткі обмеження в /etc/security/limits.conf (налаштування з кінця файлу)

root soft  nofile 65536
root hard  nofile 65536

www-data soft nofile 65536
www-data hard nofile 65536

nobody soft nofile 65536
nobody hard nofile 65536

Читання файлів макс

cat /proc/sys/fs/file-max
500000

І в /etc/pam.d/common-session:

session required pam_limits.so

З цим додано, і сервер перезапустився для гарної міри, для nginx я рахую м'які / жорсткі межі, отримуючи PID батьківського процесу і:

cat /proc/<PID>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

Батьківський процес працює як "корінь", а чотири працівники працюють як "ніхто".

root      2765  0.0  0.0  39292   388 ?        Ss   00:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    2766  3.3 17.8 235336 180564 ?       S    00:03   0:21 nginx: worker process      
nobody    2767  3.3 17.9 235432 181776 ?       S    00:03   0:21 nginx: worker process      
nobody    2769  3.4 17.9 236096 181524 ?       S    00:03   0:21 nginx: worker process      
nobody    2770  3.3 18.3 235288 185456 ?       S    00:03   0:21 nginx: worker process      
nobody    2771  0.0  0.0  39444   684 ?        S    00:03   0:00 nginx: cache manager process

Я спробував усе, що знаю, як це зробити, і міг отримати від Google. Я не можу отримати обмеження файлу для nginx для збільшення.

Допомога?

Відповіді:


32

Додайте наступний рядок до свого nginx та перезапустіть процес:

worker_rlimit_nofile 30000;

Це дозволить працівникам отримати більше файлів. Потім ви можете підтвердити за допомогою:

su - nobody
ulimit -Hn
ulimit -Sn

Це повинно вивести нові жорсткі / м'які межі.

Довідково


6
Якщо ви зміните лише worker_rlimit_nofileналаштування uWSGI, а не системні обмеження (які працювали для мене), ви не можете перевірити це через ulimit. Натомість слід поглянути прямо /proc/<pid of worker>/limits.
Ян Фабрі

Я думаю, що користувач (ніхто / www-data) повинен вийти з системи та повернутися назад, тобто. перезавантажте сервер. для мене є обмеженням того, що він збільшився, але процес все ще обмежений відповідно до кота / proc / {pid} /
limit

@felix ОП згадувало, що вони вже перезапустили сервер, але так, це потрібно.
Натан C

3

В Ubuntu відредагуйте /etc/pam.d/su додайте або коментуйте потрібний сеанс лінії pam_limits.so

Також в /etc/security/limits.conf переконайтеся, що ви маєте TABS між символами, а не пробілами.


1

переконайтеся, що після редагування цих файлів виконується наступна команда

sysctl -p

Потім перезапустіть nginx


1
Не має ефекту. Ліміти залишилися колишніми.
Geuis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.