Nie można zwiększyć limitu otwartych plików powyżej 4096 (Ubuntu)

34

Jestem na Ubuntu 17.04. Próbuję zwiększyć limit otwartych plików i żadna z instrukcji, które znalazłem w Internecie, nie działa. Mogę przejść do 4096, ale nie mogę tego przekroczyć.

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

To działa. To nie:

$ ulimit -n 4097
bash: ulimit: open files: cannot modify limit: Operation not permitted

Wydaje się, że wynika to z twardego limitu:

$ ulimit -Hn
4096

Próbowałem dodać te linie do /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

Dodałem również ten wiersz do /etc/pam.d/common-session i /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

Od tego czasu ponownie uruchomiłem komputer. Zmiany w limit.conf wydają się nie wpływać na nic. Twardy limit wciąż utrzymuje się na poziomie 4096, co uniemożliwia mi pójście wyżej. Jak zwiększyć limit moich otwartych plików?


Oto kilka dodatkowych informacji o konfiguracji:

$ cat /proc/sys/fs/file-max 
1624668
mkasberg
źródło

Odpowiedzi:

56

OK, w końcu to rozgryzłem. Ograniczenia, które ustawiłem w /etc/security/limits.conf były stosowane, ale nie były stosowane do graficznego logowania. Można to sprawdzić w następujący sposób w oknie terminala:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Dalsze badania doprowadziły mnie do tego raportu o błędach , który wskazał mi właściwy kierunek. Aby zmodyfikować limit używany przez powłokę logowania, musimy dodać następujący wiersz do /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Ta zmiana działa, ale wpływa tylko na miękki limit. (Pozostawiając nam ograniczenie do sztywnego limitu 4096). Aby również wpłynąć na twardy limit, musimy zmodyfikować /etc/systemd/system.conf tą samą zmianą.

Zmiany, które wprowadziłem w /etc/pam.d, nie były konieczne. Przynajmniej na Ubuntu, to już działa. Nie było też konieczne zmienianie ustawień dla rooti *w limit.conf. Zmiana limitów mkasbergbyła wystarczająca, przynajmniej w moim przypadku użycia.


W podsumowaniu

Jeśli chcesz zwiększyć pokazany limit ulimit -n, powinieneś:

  • Zmodyfikuj /etc/systemd/user.conf i /etc/systemd/system.conf za pomocą następującego wiersza (to zajmuje się logowaniem graficznym):

    DefaultLimitNOFILE=65535
    
  • Zmodyfikuj /etc/security/limits.conf za pomocą następujących linii (zajmuje się to logowaniem innym niż GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Uruchom ponownie komputer, aby zmiany odniosły skutek.

mkasberg
źródło
2
DefaultLimitNOFILE=65535wykonał lewę. Ale dlaczego nie /etc/security/limits.conf działa?
Suvitruf mówi Przywróć Monikę
6
Login GUI korzysta z systemd, który najwyraźniej ma własną konfigurację ( /etc/systemd/system.conf), która jest niezależna od normalnej konfiguracji dla sesji terminalowych ( /etc/security/limits.conf). Nie wiem wystarczająco dużo o systemd, aby wiedzieć, dlaczego został zaimplementowany w ten sposób.
mkasberg
1
@ Suvitruf, ponieważ jest ignorowany w systemie systemowym. Wysyłam odpowiedź.
Marc.2377
1
Chcę tylko wskazać, że limity dla rootużytkownika nie mogą być określone przez *specyfikatory grupy lub. rootliterał musi być wyraźnie określony.
Petr Javorik,
2
To działa dla mnie po ponownym uruchomieniu .
Shihe Zhang
14

Nie trzeba niczego zmieniać w /etc/security/limits.confpliku, jest on ignorowany, jeśli używasz systemd.

(powielanie zmodyfikowanej odpowiedzi na inne pytanie w sieci ...)

Alternatywa dla tych, którzy wolą nie edytować ustawień domyślnych /etc/systemd/system.confi /etc/systemd/user/confplików:

  1. utwórz nowy plik /etc/systemd/system.conf.d/limits.confz tymi treściami:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. uruchom systemctl daemon-reexecjako root

  3. wyloguj się i zaloguj ponownie

  4. sprawdź swój nowy limit za pomocą ulimit -n.

Szczegółowe informacje można znaleźć na stronie systemd-system.confpodręcznika .

Marc.2377
źródło
W moim systemie Ubuntu 18.10 ten plik to /etc/systemd/system.conf. Dokonanie zmiany wydaje się, że załatwiło sprawę, dziękuję.
Stephen Kennedy
1
Samo wylogowanie się nie działało (Ubuntu 18.04), ale ponowne uruchomienie wykonało zadanie. Bardzo eleganckie rozwiązanie, dzięki.
stann1
0

Używając Ubuntu 17.04 otrzymałem opisany twardy limit:

[email protected]:~$ ulimit -Hn
4096

Mógłbym go obniżyć za pomocą ulimit, ale nie zwiększyć, tak jak opisuje to pytanie. ulimitinstrukcja opisuje:

tylko root może zwiększyć twardy limit.

Próbowałem więc ustawić wyższy limit w /etc/security/limits.confnastępujący sposób:

user hard nofile 9999

i nowy login, taki jak, ssh localhost -l userdał mi nowy limit:

[email protected]:~$ ulimit -Hn
9999

Mam nadzieję, że to również dla ciebie zadziała.

Paresh Chauhan
źródło
0
  1. edytuj /etc/systemd/system/sonar.service

  2. dodaj te dwie linie w obszarze Usługa

[Usługa]

LimitMEMLOCK = nieskończoność

Limit NOFILE = 65535

  1. systemctl daemon-reload
  2. ponownie uruchom sonar systemctl

to działa dla mnie.

Matthew Ma
źródło
0

TL; DR Czułem potrzebę skoncentrowania odpowiedzi, więc łatwiej je znaleźć. Zajęło mi wieki, aby zebrać wszystkie elementy, aby działało poprawnie ...

Należy wziąć pod uwagę 2 lokalizacje.

  1. Sesja GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    lub lepiej tutaj:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. środowisko powłoki

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    lub lepiej tutaj:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Po zmianie ustawień w powyższych plikach uruchom ponownie, a następnie sprawdź limity za pomocą: ulimit -n -Hn -Sn

UV
źródło