Pytanie Jakie jest ograniczenie maksymalnej liczby otwartych plików w systemie Linux?


W systemie Linux, gdy proces otwiera plik, system operacyjny sprawdzi ograniczenie maksymalnej liczby otwartych plików.

Jeśli ograniczenie wynosi 1024, jaka jest liczba?

Czy to reprezentuje

  • liczba plików otwieranych przez proces
  • liczba plików otwieranych przez użytkownika, który jest właścicielem procesu
  • liczba wszystkich otwartych plików w systemie operacyjnym?

11
2017-07-25 12:29


pochodzenie




Odpowiedzi:


Możesz sprawdzić miękkie limity i twarde limity twojego systemu przez ulimit -a dowództwo.

  1. miękkie limity są po prostu obecnie obowiązującymi limitami.
  2. twarde limity oznaczają maksymalną wartość, której nie można przekroczyć poprzez ustawienie miękkiego limitu.

Limity miękkie mogą być ustawione przez dowolnego użytkownika, podczas gdy twarde limity są zmieniane tylko przez root. Granice są własnością a proces. Są dziedziczone, gdy tworzony jest proces potomny, więc w trakcie inicjalizacji systemu w skryptach init powinny być ustawione ograniczenia systemowe, a limity użytkowników powinny być ustawione podczas logowania użytkownika, na przykład przy użyciu pam_limits.

Często są ustawione wartości domyślne podczas uruchamiania komputera. Tak więc, nawet jeśli możesz zreimować ulimit w pojedynczej powłoce, może się okazać, że resetuje się ponownie do poprzedniej wartości przy ponownym uruchomieniu. Możesz chcieć grep swoje skrypty startowe dla komend ulimit istnienia, jeśli chcesz zmienić domyślne.

Jeśli ograniczenie wynosi 1024, oznacza to, że użytkownik / proces może otworzyć maksymalnie 1024 pliki. jeśli przekroczysz ten limit oznacza open, pipe i dup wywołania systemowe nie powiedzie się:

RLIMIT_NOFILE:

Określa wartość o jeden większą od maksymalnego numeru deskryptora pliku, który można otworzyć za pomocą tego procesu. Próby (open(2), pipe(2), dup(2)itp.), aby przekroczyć ten limit, wygeneruj błąd EMFILE.


8
2017-07-25 13:32



co robi ulimit z -1? - Blake


Jest to liczba otwartych plików deskryptory  za proces. Wszystkie mogą odnosić się do tego samego pliku lub innych plików.

Możesz zobaczyć aktualne ograniczenia za pomocą ulimit -a w powłoce lub programowo za pomocą getrlimit. Obowiązują limity dla całego systemu /etc/security/limits.conf.

Model obiektowy systemu plików w systemie Linux to:

file descriptor -> file description -> dentry -> inode
  1. deskryptor pliku jest liczbą całkowitą używaną przez aplikację.
  2. Opis pliku jest strukturą danych jądra, do której należy jeden lub więcej deskryptory plików odnosić się do.
  3. dentry jest nazwą pliku. Jeden plik może mieć wiele nazw (twarde linki).
  4. i-węzeł jest zawartością pliku.

dup tworzy nowy deskryptor pliku z tym samym opisem pliku. open tworzy nowy deskryptor pliku i opis pliku.


1
2017-07-25 12:55



Nie odpowiada to na pytanie, czy jest to proces, użytkownik czy system. - Toby Speight


Według mnie oznacza to maksymalną liczbę otwartych plików (deskryptorów) na użytkownika.

Edytować: W rzeczywistości limit.conf ustawia tę wartość na użytkownika:

* hard nofile 1024

co oznacza sztywny limit dla wszystko użytkownicy (wszyscy jak każdy z nich)

Lub może być ustawiony w ten sposób:

myuser hard nofile 1024

co oznacza 1024 limit dla użytkownika myuser


0
2017-07-25 12:50



Er, nie, to określa, ile deskryptorów za proces każdy użytkownik jest dozwolony. - Toby Speight