Jak zwiększyć limit maksymalnej liczby otwartych plików na Ubuntu 18.04?

16

Uruchomiłem ulimit -n 65536, dodałem następujące wiersze /etc/security/limits.conf:

*    soft nofile 65536
*    hard nofile 65536
alix soft nofile 65536
alix hard nofile 65536
root soft nofile 65536
root hard nofile 65536

I dodał session required pam_limits.sodo obu:

  • /etc/pam.d/common-session
  • /etc/pam.d/common-session-noninteractive

I fs.file-max = 65536do /etc/sysctl.d/60-file-max.conf.

Mimo to po ponownym uruchomieniu i uruchomieniu ulimit -nsesji otrzymuję tylko 4096 (wcześniej było 1024).

czego mi brakuje?

Alix Axel
źródło

Odpowiedzi:

12

Z instrukcji:

 -n     The maximum number of open file descriptors (most
        systems do not allow this value to be set)

systemd ma taką opcję:

$ more /etc/systemd/system.conf | grep NOFILE
#DefaultLimitNOFILE=

Ale dotyczy to tylko graficznych ustawień użytkownika. Usuń #i możesz ustawić na 65536.

Komentarz Daniela Fernándeza :

DefaultLimitNOFILE=65536 

może być również potrzebny w

/etc/systemd/user.conf 
Rinzwind
źródło
1
Zapomniałem wspomnieć, ja też to zrobiłem.
Alix Axel
1
@AlixAxel: Ta odpowiedź działała dla mnie, oprócz * - nofile 16384(próbowałem tylko 16384) w /etc/security/limits.conf.
Doug Smythies,
65k jest założeniem i można by się spodziewać, że istnieją górne ograniczenia tego, co jest dozwolone. Możesz chcieć zacząć niżej, jak wskazał Doug;)
Rinzwind
Co rozumiesz przez „Ale dotyczy to również graficznych ustawień użytkownika”?
sinan
1
Ustawienie notatek DefaultLimitNOFILE=65536może być również potrzebne w/etc/systemd/user.conf
Daniel Fernández,
2

Ubuntu 18.04 Krok po kroku

Mam nadzieję, że to wszystko pomaga, dość długo, ale działa (z dowodem)

Natknąłem się na ten wątek podczas instalowania MongoDb na Ubuntu 18.04

https://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

Jak widać, jest dość stary, ale dla mnie działa.

Oto co zrobiłem.

  1. Zalecane ustawienia MongoDb ( https://docs.mongodb.com/manual/reference/ulimit/#review-and-set-resource-limits )

    • -f (rozmiar pliku): nieograniczony
    • -t (czas procesora): nieograniczony
    • -v (pamięć wirtualna): nieograniczona [1]
    • -l (rozmiar zablokowanej pamięci): nieograniczony
    • -n (otwarte pliki): 64000
    • -m (rozmiar pamięci): nieograniczony [1] [2]
    • -u (procesy / wątki): 64000
  2. Sprawdź moje obecne limity

ubuntu @ isdb-stage: ~ $ ulimit -a
główny rozmiar pliku (bloki, -c) 0
rozmiar seg danych (w kilobajtach, -d) nieograniczony
priorytet planowania (-e) 0
rozmiar pliku (bloki, -f) nieograniczony
sygnały oczekujące (-i) 7873
maksymalna zablokowana pamięć (kilobajty, -l) 16384
maksymalny rozmiar pamięci (kilobajty, -m) nieograniczony
otwórz pliki (-n) 1024
rozmiar rury (512 bajtów, -p) 8
Kolejki komunikatów POSIX (bajty, -q) 819200
priorytet w czasie rzeczywistym (-r) 0
rozmiar stosu (kB, -s) 8192
czas procesora (sekundy, -t) nieograniczony
maksymalna liczba procesów użytkownika (-u) 7873
pamięć wirtualna (kilobajty, -v) nieograniczona
blokady plików (-x) nieograniczone
  1. Zanotuj, co wymaga zmiany

    • rozmiar zablokowanej pamięci , należy ustawić na nieograniczony.
    • otwarte pliki , należy ustawić na 64000
    • procesy / wątki * , należy ustawić na 64000
  2. Co mówi Ubuntu o tym, jak zmienić te limity?

$ man limit.conf

NAZWA
   limit.conf - plik konfiguracyjny dla modułu pam_limits

OPIS
   Moduł pam_limits.so stosuje limity ulimit, miły priorytet i liczbę sesji równoczesnego logowania do sesji logowania użytkownika. Ten opis składni pliku konfiguracyjnego dotyczy

       Plik /etc/security/limits.conf i pliki * .conf w pliku 
       Katalog /etc/security/limits.d.
  1. Wydaje się dość jasne, edytuj plik /etc/security/limits.conf. Ok, wymyślmy to ...

Oto początek tego pliku. Spójrz, nawet zawiera instrukcje, pamiętaj, że jest to oprogramowanie typu open source napisane przez dobrych facetów! :)

    vi /etc/security/limits.conf

    # /etc/security/limits.conf 
    # Każda linia opisuje limit dla użytkownika w formie:                                                                   
    #                                                                                
    #Gdzie:                                                               
    # może być:
    # - nazwa użytkownika

(Jeśli chcesz uzyskać więcej informacji, obejrzyj sam plik)
  1. Wreszcie dokonaj zmian. Ponieważ MongoDb działa jako grupa i użytkownik mongodb, dobrym pomysłem byłoby zwiększenie limitów tylko dla użytkowników. Widziałem „*” używane tu i tam, dla mnie to ryzyko bezpieczeństwa. Daje to wszystkim różnym limitom na serwerze, które można wykorzystać do maksymalizacji serwera. Zróbmy je więc tylko dla użytkownika mongodb.

Oto moje zmiany: -

mongodb soft memlock nieograniczony
Mongodb Hard Memlock Unlimited
mongodb soft nofile 64000
mongodb hard nofile 64000
mongodb soft nproc 64000
mongodb hard nproc 64000
  1. Wreszcie pamiętaj o tym we wpisie man limit.conf.

    limit.conf - plik konfiguracyjny dla modułu pam_limits

    Lepiej upewnij się, że moduł pam_limits jest załadowany, aby wszystkie te ograniczenia działały poprawnie. Aby to zrobić, edytuj /etc/pam.d/common-session. Oczywiście jest to również na stronie man.

sudo vi /etc/pam.d/common-session

# Dodaj to, aby załadować pam_limits.so.
wymagana sesja pam_limits.so

Ponowne uruchomienie pokaże limity (dla użytkownika mongodb) zostały zastosowane. Jeśli zastosowałeś je za pomocą „*”, możesz sprawdzić bez konieczności przełączania się na użytkownika mongodb. Po prostu wykonaj to polecenie.

$ ulimit -a

główny rozmiar pliku (bloki, -c) 0
rozmiar seg danych (w kilobajtach, -d) nieograniczony
priorytet planowania (-e) 0
rozmiar pliku (bloki, -f) nieograniczony
sygnały oczekujące (-i) 7873
maksymalna zablokowana pamięć (kilobajty, -l) nieograniczona
maksymalny rozmiar pamięci (kilobajty, -m) nieograniczony
otwórz pliki (-n) 64000
rozmiar rury (512 bajtów, -p) 8
Kolejki komunikatów POSIX (bajty, -q) 819200
priorytet w czasie rzeczywistym (-r) 0
rozmiar stosu (kB, -s) 8192
czas procesora (sekundy, -t) nieograniczony
maksymalna liczba procesów użytkownika (-u) 64000
pamięć wirtualna (kilobajty, -v) nieograniczona
blokady plików (-x) nieograniczone

Jak widać, lubieżnie żartobliwie ustawiono limity, których chcieliśmy.

angielski
źródło