Jak zmienić limit liczby otwartych plików w Linuksie? [zamknięte]

Podczas uruchamiania mojej aplikacji czasami pojawia się błąd o too many files open.

Running ulimit -a informuje, że limit wynosi 1024. Jak zwiększyć limit powyżej 1024?

Edit ulimit -n 2048 powoduje błąd uprawnień.

 167
Author: Charles Menguy, 2008-08-29

4 answers

Zawsze możesz spróbować zrobić ulimit -n 2048. Spowoduje to tylko zresetowanie limitu dla bieżącej powłoki, a podany numer nie może przekroczyć twardego limitu

Każdy system operacyjny ma inną konfigurację twardego limitu w pliku konfiguracyjnym. Na przykład, limit otwartych plików Solaris może być ustawiony podczas rozruchu Z /etc / system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

Na OS X, te same dane muszą być ustawione w /etc / sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Pod Linuksem, te ustawienia są często w / etc / security / limits.conf.

Istnieją dwa rodzaje ograniczeń:

  • soft limity są po prostu obecnie egzekwowane limity
  • twarde limity oznaczają maksymalną wartość, której nie można przekroczyć, ustawiając limit miękki

Miękkie limity mogą być ustawiane przez każdego użytkownika, podczas gdy twarde limity są zmieniane tylko przez roota. Ograniczenia są własnością procesu. Są dziedziczone, gdy tworzony jest proces potomny, więc limity dla całego systemu powinny być ustawione podczas inicjalizacja systemu w skryptach init i limity użytkowników powinny być ustawiane podczas logowania użytkownika, na przykład przy użyciu pam_limits.

Często są ustawiane wartości domyślne, gdy maszyna uruchamia się. Tak więc, nawet jeśli możesz zresetować ulimit w pojedynczej powłoce, może się okazać, że zresetuje się ona z powrotem do poprzedniej wartości po ponownym uruchomieniu. Jeśli chcesz zmienić domyślne ustawienia, możesz użyć grep skryptów ROZRUCHOWYCH dla komend ulimit existence.

 134
Author: hoyhoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-26 06:29:14

Jeśli używasz Linuksa i wystąpił błąd uprawnień, musisz zwiększyć dozwolony limit w pliku /etc/limits.conf LUB /etc/security/limits.conf (Gdzie znajduje się plik zależy od konkretnej dystrybucji Linuksa).

Na przykład, aby umożliwić każdemu na komputerze zwiększenie liczby otwartych plików do 10000, dodaj linię do pliku limits.conf.

* hard nofile 10000

Następnie wyloguj się i ponownie zaloguj do swojego systemu i powinieneś być w stanie to zrobić:

ulimit -n 10000

Bez błędu uprawnień.

 88
Author: Jonathan Stanton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 15:53:51

1) Dodaj następujący wiersz do /etc/security/limits.conf

webuser hard nofile 64000

Następnie zaloguj się jako webuser

su - webuser

2) Edycja następujących dwóch plików dla webuser

Dołącz .bashrc i .bash_profile file by running

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Wyloguj się, a następnie zaloguj się ponownie i sprawdź, czy zmiany zostały wprowadzone poprawnie:

$ ulimit -a | grep open
open files                      (-n) 64000
To wszystko i bum, bum, bum.
 33
Author: Vikrant Telkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 17:08:41

Jeśli niektóre z Twoich usług łączą się z ulimits, czasami łatwiej jest umieścić odpowiednie polecenia w skrypcie init serwisu. Na przykład, gdy Apache zgłasza

[alert] (11) zasób tymczasowo niedostępny: apr_thread_create: nie można utworzyć wątku roboczego

Spróbuj umieścić ulimit -s unlimited w /etc/init.d/httpd. Nie wymaga to ponownego uruchomienia serwera.

 5
Author: Sysadmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-27 22:37:10