Dlaczego nie może przekroczyć 4096 otwartych plików dla użytkownika innego niż root?

13

Wydaje mi się, że nie mogę zwiększyć nofilelimitu dla użytkowników innych niż root na Ubuntu 14.04, pomimo wykonania każdej odpowiedzi StackExchange związanej z tym problemem. Do tej pory mam:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

Zrestartowano, zalogowano i:

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

Istnieje jeszcze jakoś wydaje się limit 4096 max dla użytkowników innych niż root.

Śpiączka kofeinowa
źródło
Mam dokładnie ten sam problem na pulpicie Ubuntu 16.10. Bez względu na to, co spróbuję, limity wynoszą 1024 lub 4096.
NathanAldenSr

Odpowiedzi:

13

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

user@notebook:~$ ulimit -Hn 4096  

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

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:

user@notebook:~$ ulimit -Hn 9999

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

TomTomTom
źródło
Dzięki TomTomTom. Mam już taką zmianę w /etc/security/limits.d/custom.conf. Próbowałem umieścić go bezpośrednio w /etc/security/limits.conf, jak zasugerowałeś, i nadal otrzymuję „bash: ulimit: otwarte pliki: nie można modyfikować limitu: Operacja niedozwolona”.
Caffeine Coma
Ja - zgaduję - jeden z dwóch powodów, dla których to nie działa dla ciebie:
TomTomTom
1
Zbyt długo zajęło mi edytowanie niepełnego komentarza. Proszę bardzo: zgaduję - jeden z dwóch powodów, dla których to nie działa: 1. /etc/security/limits*nie jest czytany przez mechanizm logowania - z jeszcze nieznanego powodu. 2. Twardy limit ustawia się na 4096 w innym miejscu i „tylko root może zwiększyć ...”. Możesz sprawdzić swoje profile, takie jak .bashrc(w zależności od powłoki), lub sprawdzić /etcinne miejsca, w których można ustawić ograniczenia, takie jak find /etc | grep -e ulimit -e 4096 -e nofile. BTW: próbowałeś ssh? I: czy /etc/ssh/sshd.confz jakiegoś powodu zmieniłeś się, aby uniknąć PAM?
TomTomTom
Tak - wszystkie logowanie odbywa się przez ssh. Wyłączyłem UsePAM - kilka przewodników poleca to jako część zezwalania tylko na logowanie za pomocą klucza ssh. Spróbuję go włączyć tymczasowo, aby zobaczyć, czy to jest problem. Dzięki!
Caffeine Coma
Afaik, PAM jest tym, co należy przeczytać /etc/security/limits*- możesz spróbować włączyć PAM, aby to sprawdzić. Spróbuję wyłączyć PAM, aby zobaczyć, jaką to robi różnicę i podam wyniki. --- Tak! Otóż ​​to! Po wyłączeniu PAM mój limit wynosi również 4096, chociaż ustawiony na 9999 w /etc/security/limits.conf.
TomTomTom,
4

Myślę, że ten artykuł dotyczy twojego problemu.

Zasadniczo należy użyć polecenia ulimit, aby zwiększyć dostępne zasoby.

Na przykład:

Użyj następującego polecenia polecenia, aby wyświetlić maksymalną liczbę otwartych deskryptorów plików:

cat /proc/sys/fs/file-max

Aby zobaczyć wartości twarde i miękkie, wydaj polecenie w następujący sposób:

# ulimit -Hn
# ulimit -Sn

Aby zobaczyć twarde i miękkie wartości dla użytkownika httpd lub oracle, wydaj polecenie w następujący sposób:

# su - username

Aby naprawić liczbę maksymalnych plików, możesz zwiększyć maksymalną liczbę otwartych plików, ustawiając nową wartość w zmiennej jądra / proc / sys / fs / file-max w następujący sposób (zaloguj się jako root):

# sysctl -w fs.file-max=100000

Powyższe polecenie wymusza ograniczenie do 100 000 plików. Musisz edytować /etc/sysctl.confplik i wstawić następujący wiersz, aby po ponownym uruchomieniu ustawienia pozostały bez zmian . Aby to zrobić, dołącz dyrektywę config w następujący sposób:

fs.file-max = 100000

Zapisz i zamknij plik. Użytkownicy muszą się wylogować i zalogować ponownie, aby zmiany odniosły skutek, lub po prostu wpisz następujące polecenie:

# sysctl -p

Sprawdź ustawienia za pomocą polecenia:

# cat /proc/sys/fs/file-max

lub:

# sysctl fs.file-max

Powyższa procedura ustawia ogólnosystemowe limity deskryptorów plików (FD), jednak możesz ograniczyć użytkownika httpd(lub innych użytkowników) do określonych limitów poprzez edycję /etc/security/limits.confpliku poprzez edycję /etc/security/limits.confi ustawić limity w następujący sposób:

httpd soft nofile 4096
httpd hard nofile 10240

Następnie sprawdź je:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Jeśli masz problem z innymi dystrybucjami Linuksa, sprawdź /etc/pam.d/logini upewnij się, że masz pam_limits.sowłączone, np

session required pam_limits.so
Brooke Fogg-Wolfe
źródło
2
Cześć Brooke. Niestety, wypróbowałem już sugestie z tego artykułu. Chociaż „ulimit-Hen” było dla mnie nowe; drukuje 4096, limit, w który ciągle wpadam.
Caffeine Coma
0

Jeśli jest to usługa, możesz spróbować ustawić limit /etc/systemd/system/{ServiceName}.servicedodawaniaLimitNOFILE=65536

Maicon Santana
źródło
Ubuntu 14.04 domyślnie nie używa systemd.
numer 5
Ubuntu 16.04, Tomcat 8 pracował dla mnie
Arjang