linux ve nginx için maksimum dosya tanımlayıcılarını ve worker_rlimit_nofile için en iyi değeri anlama


10

Nginx görünüşte yaygın "çok fazla dosya tanımlayıcı" hatası var. Çok fazla arama yaptıktan sonra çözüm, nginx tarafından kullanılabilen dosya tanımlayıcılarının sayısını artırmaktır. Ama bunu anlamlı ve güvenli bir şekilde yapmak için rahat hissetmem için yeterli bilgi yok. Çoğu forum / e-posta dizisinin kapsadığı ana noktalar şunlardır:

  • İşletim sisteminin kendi toplam dosya tanımlayıcı sınırı vardır (sistemimde cat /proc/sys/fs/file-max"100678" çıktıları)
  • her kullanıcının da kendi sınırı olabilir (ancak sistemimde, ulimit"sınırsız" herhangi bir kullanıcı çıktısı olarak çalışıyor , daha ayrıntılı olarak aşağıdaki güncellemeye bakın )
  • birkaç kişi bu kişinin söylediklerinin satırında bir şey söyledi: 'worker_rlimit_nofile direktifi "kaç tane" belirtmiyor, işletim sistemi limiti bunu yapıyor. Worker_rlimit_nofile yönergesi, yeterli değilse bu sınırı genişletmek için hızlı ve kirli bir yol sağlar. ' Yani ima yapılandırmak yerine nginx OS kullanıcı için sınırı ayarlamak için "daha iyi" olduğunu tahmin?

İşçi başına bağlantı sayısından daha büyük bir worker_rlimit_nofile değeri atayabilir ve bir gün diyebilirim, ama burada neler olduğunu gerçekten bilmiyorum.

  • çalışan başına sınır neden OS sınırından daha az olsun?
  • Şu anda sınırımın ne olduğunu nasıl öğrenebilirim?

güncelleme : hem kök hem de normal kullanıcı için, ulimit "sınırsız" çıkışları, AMA ulimit -Hnve ulimit -Snher iki çıkış 1024

Yanıtlar:


10

worker_rlimit_nofilenginx çalıştıran kullanıcının aksine, çalışan işlemler için dosya tanıtıcı sınırını belirler. Bu kullanıcı altında çalışan diğer programlar dosya tanımlayıcılarının bitmesini nazikçe işleyemezse, bu sınırı kullanıcı için olandan biraz daha az ayarlamanız gerekir.

İlk olarak, dosya tanımlayıcılarınızı ne kullanıyor?

  1. Bir istemciye her etkin bağlantı
  2. Proxy_pass mı kullanıyorsunuz? Bu, ana bilgisayara bir soket açacaktır: bu istekleri işleyen bağlantı noktası
  3. Yerel bir bağlantı noktasına proxy_pass mı kullanıyorsunuz? Bu başka bir açık soket. (Bu sürecin sahibi için)
  4. nginx tarafından sunulan statik dosyalar

Çalışan başına sınır neden OS sınırından daha az olsun?

İşletim sistemi tarafından kontrol edilir, çünkü çalışan makinede çalışan tek işlem değildir. Nginx çalıştıran kullanıcı için değiştirmek için aşağıya bakın. Çalışanlarınız tüm işlemler için kullanılabilir olan tüm dosya tanımlayıcılarını kullansa, sınırlarınızı ayarlamayın, bu mümkün olur.

#/etc/sysctl.conf
#This sets the value you see when running cat  /proc/sys/fs/file-max
fs.file-max = 65536"


#/etc/security/limits.conf
#this sets the defaults for all users
* soft nofile 4096
* hard nofile 4096

#This overrides the default for user `usernamehere`
usernamehere soft nofile 10240
usernamehere hard nofile 10240

Bu güvenlik sınırı değişikliklerinden sonra hala kullanıcı için yazılım sınırını artırmak zorunda kalıyorum inanıyorum ulimit.

Şu anda sınırımın ne olduğunu nasıl öğrenebilirim?

ulimit -a Çalıştırdığınız kullanıcıyla ilişkili tüm sınırları görüntüler.


1
Teşekkürler - şimdi dosya tanımlayıcı sınırını yükselttiğime göre, bağlantılar tükeniyor. Belki bana bu konuda da yardımcı olabilirsiniz :) serverfault.com/questions/209014/…
John Bachir

1
CentOS / Fedora kullanıcıları için, SELinux'u etkinleştirdiyseniz, setsebool -P httpd_setrlimit 1nginx'in rlimitini ayarlama izinlerine sahip olması için çalıştırmanız gerekecektir.
Jarrett

2

Dürüst olmak için kaynağı kontrol etmelisiniz, ancak oldukça düşük.

Kullandım worker_rlimit_nofile 15000;ve hiç sorun yaşamadım, güvenli bir şekilde artırabilirsiniz, ancak dosya tanımlayıcılarının bitme şansı çok küçüktür.

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.