Na nginx pojawia się pozornie powszechny błąd „zbyt wielu deskryptorów plików”. Po wielu poszukiwaniach rozwiązaniem jest wyraźnie zwiększenie liczby deskryptorów plików dostępnych dla nginx. Ale nie ma wystarczająco dużo informacji, aby czuć się komfortowo, robiąc to w znaczący i bezpieczny sposób. Oto główne punkty, które obejmują większość wątków na forum / w e-mailu:
- system operacyjny ma swój własny całkowity limit deskryptorów plików (w moim systemie
cat /proc/sys/fs/file-max
wyniki „100678”) - każdy użytkownik może mieć również swój własny limit (ale w moim systemie, działający
ulimit
jak każdy użytkownik wyświetla „nieograniczony”, patrz aktualizacja u dołu ze szczegółami ) - kilka osób powiedziało coś podobnego do tego, co powiedziała ta osoba : „Dyrektywa pracownik_rlimit_nofile nie określa„ ile ”, to limit systemu operacyjnego, który to robi. Dyrektywa worker_rlimit_nofile pozwala tylko na szybki i brudny sposób na zwiększenie tego limitu, jeśli to nie wystarczy ”. Sądzę więc, że implikacją jest to, że „lepiej” ustawić limit dla użytkownika systemu operacyjnego Nginx zamiast w konfiguracji?
Mogę po prostu podać wartość parametru robot_rlimit_nofile większą niż liczba połączeń na pracownika i nazwać go dniem, ale wydaje mi się, że tak naprawdę nie wiem, co się tutaj dzieje.
- dlaczego limit na pracownika byłby mniejszy niż limit systemu operacyjnego?
- Jak dowiedzieć się, jaki jest teraz mój limit?
aktualizacja : zarówno dla użytkownika root, jak i zwykłego użytkownika, ulimit wyprowadza „nieograniczony”, ALE ulimit -Hn
i ulimit -Sn
oba wyprowadza 1024
setsebool -P httpd_setrlimit 1
, aby nginx miał uprawnienia do ustawienia swojego ograniczenia.Muszę sprawdzić źródło, aby być szczerym, ale jest dość niskie.
Użyłem
worker_rlimit_nofile 15000;
i nie miałem problemów, możesz go bezpiecznie zwiększyć, jednak szansa na wyczerpanie deskryptorów plików jest znikoma.źródło