Nginx ile çok fazla açık dosya, sınırı yükseltemiyor gibi görünüyor


22

Sunucu Ubuntu 13.04'tür (GNU / Linux 3.9.3-x86_64-linode33 x86_64).

nginx, nginx / 1.2.6'dır.

Birkaç saattir bunun üzerinde çalışıyordum, işte şimdi alıyorum ve işte yaptığım işte.

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 çalışıyor:

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 dosyasında değiştirilmiş yumuşak / zor sınırlar (dosyanın sonundan ayarlar)

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

Maksimum dosyaların okunması

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

Ve /etc/pam.d/common-session içinde:

session required pam_limits.so

Bu eklendiğinde ve sunucu iyi bir ölçüm için yeniden başlatıldığında, nginx için ana işlemin PID'sini alarak yumuşak / zor sınırları sayıyorum ve:

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

Ana süreç “kök” ve 4 işçi “hiç kimse” olarak çalışıyor.

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

Nasıl yapılacağını bildiğim ve Google'dan alabildiğim her şeyi denedim. Ben edemez nginx artırmak için dosya sınırlarını olsun.

Yardım et?

Yanıtlar:


32

Aşağıdaki satırı nginx'inize ekleyin ve işlemi yeniden başlatın:

worker_rlimit_nofile 30000;

Bu, işçilerin daha fazla dosya almasına izin verecektir. Daha sonra şunları doğrulayabilirsiniz:

su - nobody
ulimit -Hn
ulimit -Sn

Bu yeni sert / yumuşak limitleri vermelidir.

Referans


6
worker_rlimit_nofileUWSGI ayarını değiştirirseniz ve sistem sınırlarını değiştirmezseniz (benim için çalıştı), bunu doğrulayamazsınız ulimit. Bunun yerine, doğrudan bakmak gerekir /proc/<pid of worker>/limits.
Jan Fabry

Bu kullanıcının (hiç kimse / www veri) çıkış yapıp tekrar girmesi gerektiğini düşünüyorum. sunucuyu yeniden başlatın. benim için ulimit arttığını gösteriyor, ancak süreç hala kedi / proc / {pid} / limitlerine göre sınırlı
felix

@felix OP zaten sunucuyu yeniden başlattıklarını söyledi, ancak evet, buna ihtiyaç var.
Nathan C

3

Ubuntu'da, /etc/pam.d/su dosyasını düzenleyin ya da gerekli pam_limits.so satırını ekleyin.

Ayrıca, /etc/security/limits.conf dosyasında boşluklar değil, karakterler arasında TABS bulunduğundan emin olun.


1

bu dosyaları düzenledikten sonra aşağıdaki komutu çalıştırdığınızdan emin olun.

sysctl -p

Sonra nginx'i yeniden başlatın


1
Etkisi yoktur. Sınırlar aynı kaldı.
Geuis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.