Po co ograniczać liczbę otwartych plików i uruchomionych procesów w systemie Linux?

14

Nie mam zbyt dużej wiedzy na temat wewnętrznego działania systemu operacyjnego, więc dlaczego mamy limity maksymalnej liczby otwartych plików i uruchomionych procesów w systemie Linux?

Byłbym wdzięczny, gdyby ktokolwiek mógł mi pomóc zrozumieć.

aka_learner
źródło

Odpowiedzi:

16

Wynika to głównie z przyczyn historycznych. Na starszych komputerach mainframe Linux wielu użytkowników łączyłoby się i korzystało z zasobów komputera mainframe. Oczywiście konieczne było ograniczenie, a ponieważ takie operacje, jak uchwyty plików i procesy były wbudowane w jądro, było tam ograniczone. Pomaga także ograniczyć ataki, takie jak bomba widełkowa . Pokazano tutaj obronę przed bombą formową przy użyciu limitów procesowych .

Pomaga także utrzymać kontrolę nad złożonymi usługami i demonami, nie pozwalając na uciekające rozwidlenia i otwieranie plików, podobnie jak w przypadku bomby widelcowej.

Należy również zauważyć, takie jak ilość dostępnej pamięci RAM i procesora oraz fakt, że 32-bitowy licznik może odwoływać się tylko tyle (tylko 4294967296 wpisów, które można zliczyć przez 32-bitowy licznik), ale takie ograniczenia są daleko powyżej tych zwykle ustawianych przez programistów i administratorów systemu. W każdym razie, na długo zanim będziesz mieć 4294967296 procesów, twój komputer prawdopodobnie zostałby zrestartowany, tak jak zaplanowano, lub gdy zaczął się blokować z powodu głodu innego zasobu.

O ile nie uruchomisz Titana z 584 TiB pamięci (nie zrobisz tego, ponieważ Linux nie może być uruchomiony jako jedna instancja na superkomputerze), prawdopodobnie nie osiągniesz tego limitu w najbliższym czasie. Nawet wtedy przeciętny proces miałby tylko około 146 KB pamięci, przy założeniu braku pamięci współdzielonej.

Przywróć Monikę - ζ--
źródło
2
+1 dla bomby widelcowej, pokazało, jak niebezpieczne mogą być te rekurencyjne metody, jeśli są używane bez ostrzeżenia w łupinach!
aka_learner
9

Większość wszystkiego jest ograniczona, zarówno w życiu, jak i w Linuksie. Czasami limity są bardzo wysokie i nie warto się o nie martwić, a czasem są zbyt niskie, ustalane arbitralnie przez leniwego programistę lub limity sprzętowe.

Arbitralne ograniczenia pojawiają się, gdy programista podejmuje decyzję, na przykład maksymalną liczbę znaków dozwoloną w polu, na przykład adres. O wiele łatwiej jest ustawić dowolny limit niż dynamicznie przydzielać pamięć w razie potrzeby. Nie chcesz przydzielać całej dostępnej pamięci do prostego pola wprowadzania, ale nie chcesz też, aby dane wejściowe zastępowały inną pamięć, która może być ważna. W przypadku otwartych plików i procesów może istnieć dowolny limit lub może być on ograniczony dostępną pamięcią. Jeśli to drugie, złe rzeczy zaczną się dziać w miarę zbliżania się do limitu, a system może się zawiesić, więc często dobrze jest mieć limit, który wchodzi w grę, zanim to nastąpi. Czasami arbitralne limity mogą zostać określone przy uruchomieniu w zależności od pamięci lub miejsca na dysku i są zwykle dość inteligentne,

Następnie istnieją ograniczenia ustalane przez sprzęt, takie jak wielkość liczby całkowitej lub znaku. Jeśli masz system 32-bitowy, istnieją limity określone przez maksymalny rozmiar liczby całkowitej (4 294 967 295, jeśli nie podpisano, lub połowę, jeśli podpisano).

Marty Fried
źródło
1
Ograniczenia, które wydają się arbitralne, mogą faktycznie opierać się na standardach. Międzynarodowe standardowe limity linii adresu pocztowego do 39 znaków. Taki limit może wydawać się arbitralny. Limit 60 znaków dla adresu prawdopodobnie byłby dowolny. Niestety, zbyt niewielu programistów sprawdza standardy, więc wiele (czasem poprawnych) limitów jest arbitralnie ustalanych.
BillThor
Zgadzam się; kiedy wciąż pracowałem jako programista, spędzałem dużo czasu na szukaniu określonych limitów, tak jak powiedziałeś, lub definiowanych w systemie operacyjnym jako makro (takie jak max_path itp.). Ale muszę powiedzieć, że arbitralne ograniczenia są zwykle lepsze niż żadne ograniczenia, szczególnie dla długości pól. :)
Marty Fried
7

W przypadku procesów / proc / sys / kernel / pid_max jest maksymalnym dozwolonym pid, więc jest to twardy limit liczby procesów, które można uruchomić w dowolnym momencie. Jednak limity pamięci zwykle wchodzą w grę znacznie wcześniej.

Dla górnego limitu otwartych plików na całym komputerze, twardym limitem jest / proc / sys / fs / file-max; zależy to od ilości pamięci w urządzeniu, więc będzie się różnić. Jądro ustawia to na:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

co daje około 100 na każdy 1 MB pamięci RAM.

Limity dla poszczególnych procesów są różne. ulimit je zdefiniuje.

Colin Ian King
źródło
-5

Mamy limit, ponieważ komputery mają ograniczenia, mam 4 GB pamięci RAM, więc nie mogę teraz uruchomić 15 gier, prawda?

Najprawdopodobniej mogę uruchomić go z pewnym opóźnieniem, ale nie byłby to człowiek, To jest limit na twoim komputerze i jądrze Linuksa, Potrzebowałbyś lepszego kernala i dużo pamięci RAM, aby móc utrzymać dowolny program, który zostanie ci rzucony .

Podobnie jak mój laptop, gdy korzystałem z systemu Windows 7, mogłem grać w Battlefield, ale zajęło mi to 80% pamięci RAM, więc jeśli spróbuję zagrać w „Need For Speed”, to zajmuje 60%. Zwykle mogę otworzyć oba, ale wtedy cały mój system jest zwolniłem, ponieważ uruchamiam 2 programy Heavy Duty, oba walczą o pamięć RAM (pamięć o dostępie swobodnym)

Krótko mówiąc, normalny komputer nie może uruchamiać jednocześnie wielu programów Muzyka, Notatnik, Przeglądarka, E-mail, Gra, Myślisz, że jest dużo na komputerze, ale to tylko zwykłe, Gra taka jak World of Warcraft wymaga dużo więcej pamięci RAM i sprawia, że ​​komputer ma problemy (chyba że masz 8-16 GB pamięci RAM, tak jak robią to drogie laptopy!)

Ubisoft Terzuz
źródło
Dzięki za informacje o procesach, o których wiemy, że obciążenie procesora będzie duże, jeśli wiele procesów będzie działać jednocześnie, a ruch na rdzeniach procesora będzie tak wysoki, aby go obsłużyć, a z czasem system przejdzie w stan zawieszenia, nie dając żadnego właściwego wycinek czasu do wykonania dowolnego procesu, ale chyba się nie mylę. Ale dlaczego istnieje również limit otwartych plików w systemie Linux?
aka_learner,
Nie wiem o limicie otwartych plików, w ogóle tego nie doświadczyłem. Może to twoje komputery są ograniczone w porównaniu do moich, nie jestem tego pewien. Zawsze mam otwartych kilka 10 plików, potem przeglądarka internetowa, odtwarzacz muzyczny i terminal.
Ubisoft Terzuz,
Zasadniczo zdarza mi się, gdy moja baza danych mysql wyświetla następujący komunikat: „120428 20:30:01 [BŁĄD] / usr / sbin / mysqld: Nie można otworzyć pliku:„ ./djlabo_open/cart_layout.frm ”(errno: 24)” błąd w dzienniku błędów, ponieważ linux nie pozwala mu otworzyć tego pliku bazy danych.
aka_learner
Prawdopodobnie jest to coś innego niż ograniczenie systemu operacyjnego do otwierania plików.
Nanne
1
@Terzuz To naprawdę zależy od tego, czy ludzie uważają, że odpowiedzi innych są poprawne. Wiele osób (w tym ja niestety) czuje, że ta odpowiedź może nie dotyczyć limitów wymienionych w pytaniu, ale innych limitów.
Przywróć Monikę - ζ--