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".


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.


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ę.


Jestem na CentOS 6.5. Zaktualizowałem również moje pytanie o wyniki niektórych z nich.
tubaguy50035
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.