Mam dwa serwery CentOS 5 o prawie identycznych specyfikacjach. Kiedy się loguję i robię ulimit -u
, na jednej maszynie dostaję unlimited
, a na drugiej dostaję 77824
.
Kiedy uruchamiam crona, takie jak:
* * * * * ulimit -u > ulimit.txt
Otrzymuję te same wyniki ( unlimited
, 77824
).
Próbuję ustalić, gdzie są one ustawione, abym mógł je zmienić. Nie są one ustawione w żadnym z moich profili ( .bashrc
, /etc/profile
, itd.). Nie wpłyną one i tak na crona) ani na /etc/security/limits.conf
(który jest pusty).
Szukałem google, a nawet posunąłem się tak daleko, jak na razie grep -Ir 77824 /
, ale jak dotąd nic się nie pojawiło. Nie rozumiem, w jaki sposób te maszyny mogły być ustawione z różnymi limitami.
Zastanawiam się nie dla tych maszyn, ale dla innej (CentOS 6) maszyny, która ma limit 1024
, który jest zdecydowanie za mały. Muszę uruchamiać zadania cron z wyższym limitem i jedynym sposobem, w jaki wiem, jak to ustawić, jest samo zadanie cron. W porządku, ale wolałbym ustawić go szeroko, żeby nie był tak hackerski.
Dziękuję za wszelką pomoc. Wydaje się, że powinno to być łatwe (NIE).
EDYCJA - ROZWIĄZANE
Ok, rozgryzłem to. Wydaje się, że jest to problem z CentOS 6 lub konfiguracją mojej maszyny. W konfiguracji CentOS 5 mogę ustawić /etc/security/limits.conf
:
* - nproc unlimited
i to skutecznie zaktualizowałoby konta i limity cron. Jednak to nie działa w moim pudełku CentOS 6. Zamiast tego muszę zrobić:
myname1 - nproc unlimited
myname2 - nproc unlimited
...
I wszystko działa zgodnie z oczekiwaniami. Może specyfikacja UID działa, ale symbol wieloznaczny (*) zdecydowanie NIE JEST tutaj. Dziwne, że symbole wieloznaczne działają dla nofile
limitu.
Nadal chciałbym wiedzieć, skąd faktycznie pochodzą wartości domyślne, ponieważ domyślnie ten plik jest pusty i nie mogłem zrozumieć, dlaczego miałem różne wartości domyślne dla dwóch urządzeń CentOS, które miały identyczny sprzęt i pochodziły od tego samego dostawcy .
/etc/security/limits.d/
?Odpowiedzi:
Te „domyślne” limity są stosowane przez:
init
procesie)fork(2)
czasie),setrlimit(2)
).Procesy zwykłych użytkowników nie mogą przekraczać twardych limitów.
Jądro Linux
W czasie uruchamiania Linux ustawia domyślne limity dla
init
procesu, które są następnie dziedziczone przez wszystkie inne (potomne) procesy. Aby zobaczyć te limity:cat /proc/1/limits
.Na przykład domyślne ustawienie jądra dla maksymalnej liczby deskryptorów plików (
ulimit -n
) wynosi 1024/1024 (miękki, twardy) i zostało podniesione do 1024/4096 w Linuksie 2.6.39.Domyślna maksymalna liczba procesów, o których mówisz, jest ograniczona do około:
dla architektur x86 (co najmniej), ale czasami rozkładów zmienić domyślne wartości jądra, więc sprawdzić kod źródłowy jądra dla
kernel/fork.c
,fork_init()
. Limit „liczby procesów” nazywa się tam RLIMIT_NPROC.PAM
Zwykle, aby zapewnić uwierzytelnianie użytkownika podczas logowania, PAM jest używany wraz z niektórymi modułami (patrz
/etc/pam.d/login
).Na Debianie, moduł PAM odpowiedzialny za ustalanie limitów jest tutaj:
/lib/security/pam_limits.so
.Ta biblioteka odczyta swoją konfigurację z
/etc/security/limits.conf
i/etc/security/limits.d/*.conf
, ale nawet jeśli te pliki są puste, pam_limits.so może użyć na stałe wartości , które można sprawdzić w kodzie źródłowym.Na przykład w Debianie biblioteka została załatana, więc domyślnie maksymalna liczba procesów (
nproc
) jest nieograniczona, a maksymalna liczba plików (nofile
) to 1024/1024:Więc sprawdzić kod do CentOS”pam źródłowy modułu (poszukaj RLIMIT_NPROC).
Należy jednak pamiętać, że wiele procesów nie przejdzie przez PAM (zwykle, jeśli nie są uruchamiane przez zalogowanego użytkownika, np. Demony i może zadania cron).
źródło
/etc/initscript
- „wygodne miejsce do dostosowania limitów procesów”, konfigurowalne poprzez/etc/sysconfig/ulimit
./proc/1/limits
) od wersji 1.1.4 (wydanej w 2011 r.).Na RHEL6 (CentOS6) „maksymalna liczba procesów użytkownika” jest ustawiona domyślnie na 1024.
Możesz zmienić tę wartość w pliku:
Zobacz https://bugzilla.redhat.com/show_bug.cgi?id=432903, jeśli chcesz narzekać :)
źródło
Czy po sprawdzeniu limitów używałeś do tego użytkownika root?
Z strony
limits.conf
podręcznika:W tym przypadku użycie jawnych nazw użytkowników rozwiązałoby problem.
źródło
limits.conf
plik jest pusty (jakolimits.d
katalog).Informacje na ten temat są okropne w Internecie, oto plik limit.conf, który zrobiłem dla systemu Linux Debian, pokazując wszystkie możliwe opcje i ich maksymalne „bezpieczne” limity, odpowiednio dostosuj.
Są to najwyższe wartości, które możesz ustawić, niektóre rzeczy są zakodowane, aktywacja tych powoduje błąd i niemożność zalogowania się do konsoli, modyfikowanie komentowanych opcji na własne ryzyko, ale nie musisz tego robić (domyślnie jest to nieograniczone w większości)
Mam nadzieję, że jest to przydatne dla kogoś, ponieważ nigdzie nie mogłem znaleźć tych informacji, są 4 godziny badań nad tym plikiem.
źródło
jądro / fork.c
W 64-bitowym rozmiarze wątku to 8192
Teraz otrzymuję sumę w kb w dzieleniu przez 4
Teraz mam liczbę stron
Ostateczny wynik to
W ten sposób otrzymałeś parametr Thread-Max, a domyślny limit procesu użytkownika to połowa
ulimit z katalogu głównego
źródło
Wygląda na to, że /etc/security/limits.conf
http://ss64.com/bash/limits.conf.html
źródło
Jest jeszcze jedna możliwość, że konfiguracja „noproc” nie działa podczas konfigurowania w /etc/security/limits.conf.
Jest jeszcze jeden plik, który przesłania twoją konfigurację /etc/security/limits.d/90-nproc.conf.
Tutaj * config zastąpi wszystko, co ustawiłeś w poprzednim pliku konfiguracyjnym. Idealnie więc skonfigurujesz swoje ustawienia w tym pliku.
źródło