Zwiększenie ulimit na CentOS

18

Mamy okno CentOS, które próbuję zwiększyć maksymalną liczbę plików, które użytkownik może otworzyć. Obecnie, gdy biegnę ulimit -Snmam 1024i ulimit -Hndaje 4096. Potrzebuję tej liczby około 6000.

W /etc/sysctl.confustawiłem fs.file-max = 100000. W /etc/security/limits.confmam następujący zestaw:

username soft nofile 6000
username hard nofile 65535

Wylogowałem się i zalogowałem ponownie, usernameale nadal nie widzę moich zmian. Czego potrzebuję, aby zmienić tę wartość?

Mam tylko /etc/security/limits.dto 90-nproc.conf. Upewniłem się również, że ulimit nie jest wywoływany w moim .bash_profile lub .bashrc.

Po uruchomieniu sysctl -pwyrzuca ustawienia, które chcę, i pokazuje wartość fs.file-maxtego, czego chcę. Ale kiedy biegnę ulimit -Sn, dostaję 1048. Jeśli spróbuję uciec sysctl --system, dostaję error: Unknown parameter "--system".

tubaguy50035
źródło
Czy próbowałeś zrestartować komputer? O ile wiem, te ustawienia są odczytywane podczas uruchamiania systemu.
Kamil
Nie potrzebujesz do tego ponownego uruchomienia.
Xavier Lucas

Odpowiedzi:

14

Aby wymusić /etc/sysctl.confponowne odczytanie, uruchom sysctl -p.

Plik /etc/security/limits.confjest odczytywany przez powłoki logowania i powinieneś zamknąć okna aktywnych sesji, jeśli jest w GUI. W przypadku zdalnych loginów ma to wpływ na ponowne zalogowanie.

Xavier Lucas
źródło
1
Uruchomiłem to, wciąż nie widząc zmian po ponownym uruchomieniu.
tubaguy50035
@ tubaguy50035 fs.file-maxto maksymalna liczba otwartych plików w systemie. Jest to twardy limit i nie będzie odzwierciedlony w ulimitpołączeniach w twoim przypadku.
Xavier Lucas
W porządku Czy nie powinienem już uruchamiać zbyt wielu otwartych plików?
tubaguy50035
@ tubaguy50035 Nie powiązane. Jest to twardy limit systemowy, który zastąpi dowolną liczbę powyżej w limit.conf. Ale limit.conf jest nadal stosowany. Czy możesz spróbować ustawić twarde i miękkie limity za pomocą ulimit bezpośrednio w nowej sesji i sprawdzić, czy uzyskasz takie same maksima? Wydaje się, że coś przesłoniło twoją konfigurację.
Xavier Lucas
Mówi, że operacja jest niedozwolona. Czy muszę dać użytkownikowi dostęp do czegoś? Wolę, aby użytkownik sieci nie miał uprawnień roota.
tubaguy50035
6

Jak powiedział inny plakat, sysctl musi ustawić wartość w działającym jądrze. Istnieje kilka sposobów ustawienia wartości bez ponownego uruchamiania:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

IMHO ostatnia metoda jest najlepsza, ponieważ replikuje kolejność stosowania ustawień podczas rozruchu (a więc jeśli wystąpi konflikt, stanie się to widoczne).

Uwaga: Nie jestem pewien, której wersji CentOS używasz, ale przynajmniej na 7 napotkałem problem polegający na tym, że jeśli Dracut odbuduje initramfs z jakiegokolwiek powodu (na przykład podczas instalowania nowego modułu jądra), skopiuje zawartość /etc/sysctl.* do initramfs, który zostanie następnie wykonany przez systemd-sysctl podczas tej fazy, nawet jeśli później usuniesz te wpisy z /etc/sysctl.conf.

W moim środowisku edytowałem moduł systemd dracut, aby wykluczyć /etc/sysctl.* z tego środowiska (ponieważ te ustawienia zostaną ustawione, gdy rootfs zostanie zamontowany, a systemd-sysctl uruchomi się ponownie). To tylko gotcha, na którą możesz natknąć się.

Boscoe
źródło
Jestem na CentOS 6.5. Zaktualizowałem również moje pytanie o wyniki niektórych z nich.
tubaguy50035