Czy istnieje (techniczny lub praktyczny) limit, na ile można skonfigurować maksymalną liczbę otwartych plików w systemie Linux? Czy są jakieś negatywne skutki, jeśli skonfigurujesz go na bardzo dużą liczbę (powiedzmy 1-100M)?
Myślę, że tutaj jest użycie serwera, a nie systemów wbudowanych. Programy wykorzystujące ogromne ilości otwartych plików mogą oczywiście zjadać pamięć i być wolne, ale interesują mnie niekorzystne efekty, jeśli limit jest skonfigurowany znacznie większy niż to konieczne (np. Pamięć zużywana przez samą konfigurację).
linux
files
limit
open-files
Sampo
źródło
źródło
Odpowiedzi:
Podejrzewam, że głównym powodem tego limitu jest uniknięcie nadmiernego zużycia pamięci (każdy otwarty deskryptor pliku używa pamięci jądra). Służy również jako zabezpieczenie przed błędnymi aplikacjami wyciekającymi deskryptory plików i zużywającymi zasoby systemowe.
Biorąc jednak pod uwagę, jak absurdalnie dużo pamięci RAM mają współczesne systemy w porównaniu z systemami sprzed 10 lat, myślę, że domyślne wartości są dziś dość niskie.
W 2011 r. Domyślny twardy limit deskryptorów plików w systemie Linux został zwiększony z 1024 do 4096 .
Niektóre oprogramowanie (np. MongoDB) wykorzystuje o wiele więcej deskryptorów plików niż domyślny limit. Ludzie MongoDB zalecają podniesienie tego limitu do 64 000 . Użyłem
rlimit_nofile
300 000 dla niektórych aplikacji.Dopóki utrzymujesz miękki limit na domyślnym poziomie (1024), prawdopodobnie dość bezpieczne jest zwiększenie twardego limitu. Programy muszą
setrlimit()
sprawdzać, aby podnieść swój limit powyżej limitu miękkiego i nadal są ograniczone limitem twardym.Zobacz także kilka powiązanych pytań:
źródło
Wpływ normalnie nie byłby możliwy do zaobserwowania, ale moduł IO jądra będzie musiał zająć się wszystkimi otwartymi deskryptorami plików i może również mieć wpływ na wydajność pamięci podręcznej.
Takie limity mają tę zaletę, że chronią użytkownika przed własnymi błędami (lub stronami trzecimi). Na przykład, jeśli uruchomisz mały program lub skrypt, który rozwidla się w nieskończoność, ostatecznie zablokuje się na jednym z nich
ulimit
i tym samym zapobiegnie bardziej intensywnemu (być może niemożliwemu do odzyskania) zawieszeniu się komputera.O ile nie masz dokładnych powodów, aby zwiększyć którykolwiek z tych limitów, powinieneś go unikać i lepiej spać.
źródło
Jest to technicznie ograniczone do maksymalnej wartości niepodpisanego długiego (C Lang), tj. 4 294 967 295
Odniesienie:
fs.h
plikźródło
Myślę, że twoje obawy są zrozumiałe, ale najprawdopodobniej Linux nie zużyje dużo pamięci dla skonfigurowanych (ale nieużywanych deskryptorów plików) :)
Nie pamiętam takiego problemu w mojej karierze zawodowej przez ostatnie 10 lat.
Pozdrowienia.
źródło
Cicho późno, ale powinno to pomóc wszystkim innym uzyskać odpowiedź na to pytanie. Praktyczny limit liczby otwartych plików w systemie Linux można również policzyć przy użyciu maksymalnej liczby deskryptorów plików, które proces może otworzyć.
Widziałem zmiany limitów z systemu na system. Na stronie podręcznika użytkownika getlimit można zobaczyć, która
RLIMIT_NOFILE-1
określa limity wewnętrznie.Aby sprawdzić wartość RLIMIT_NOFILE, możesz użyć poniższej instrukcji, aby uzyskać krotkę
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
Krotka zwraca wyniki jako (Soflimit, hardlimit). Dla mnie działa na wielu systemach wyniki są jak poniżej
Uwaga: 9223372036854775807 liczba ta oznacza po prostu nieskończoność. Zawsze osiągniesz inne limity zasobów, zanim to osiągniesz. Jeśli zmodyfikujesz hardlimit w systemie ponad to, czym on jest, będziesz musiał zmodyfikować parametry jądra.
źródło