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.