Próbuję zwiększyć maksymalną liczbę otwartych plików dla bieżącego użytkownika
> ulimit -n
1024
Próbuję zwiększyć i nie powieść w następujący sposób
> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted
Więc robię to naturalnie i staram się biegać z uprawnieniami tymczasowymi, ale zawodzę
> sudo ulimit -n 4096
sudo: ulimit: command not found
pytania
- Jak zwiększyć ulimit?
- Dlaczego to się dzieje?
Korzystanie z Fedory 14
ulimit 4096
nie działa. Myślę, że-n
jest poprawny. Jako dowód koncepcji działa, jeśli najpierwsudo su - root
(ale tylko zmiany dla roota).Odpowiedzi:
ulimit
jest wbudowaną powłoką, a nie zewnętrznym poleceniem. Należy go wbudować, ponieważ działa on na sam proces powłoki, taki jakcd
: limity, podobnie jak bieżący katalog, są własnością tego konkretnego procesu.sudo bash -c 'ulimit -n 4096'
działałoby, ale zmieniłoby limit wywoływanegosudo
tylko przez bash procesu , co by ci nie pomogło.Istnieją dwie wartości dla każdego limitu: limit twardy i limit miękki. Tylko root może podnieść twardy limit; każdy może obniżyć twardy limit, a miękki limit można modyfikować w dowolnym kierunku z jedynym ograniczeniem, że nie może być wyższy niż twardy limit. Miękki limit to rzeczywista wartość, która ma znaczenie.
Dlatego musisz ustalić, że wszystkie procesy mają twardy limit dla otwartych plików wynoszący co najmniej 4096. Możesz utrzymać miękki limit na 1024. Przed uruchomieniem tego procesu, który wymaga dużej liczby plików, zwiększ limit miękki. W
/etc/security/limits.conf
dodaj liniegdzie
paislee
jest nazwa użytkownika, dla którego chcesz uruchomić proces. W powłoce, która uruchamia proces, dla którego chcesz mieć wyższy limit, uruchompodnieść miękki limit do twardego.
źródło
sudo bash -c
są,sudo -i
które uruchamiają powłokę logowania isudo -s
które uruchamiają powłokę. Obowiązują te same ograniczenia, ale może to być przydatne w innych okolicznościach.sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"
. Ale zarównoulimit -c 1024
iexec su $LOGNAME"
dotyczy tylko powłoka utworzona przezsudo
, więc jaki jest cel polecenia?exec su $LOGNAME"
nie robi też nic znaczącego, aby skorzystać ze zmienionego limitu. Jestem bardzo zdezorientowany i zastanawiam się, czy czegoś mi brakuje.ulimit -Sn unlimited
nie działa na większości powłok. Właściwą metodą jest zadzwonić,ulimit -a
a następnie zadzwonićulimit -n <number>
tam, gdzie <liczba to twardy limit (prawa kolumna).otwórz plik
/etc/security/limits.conf
i dodaj linię<user> soft nofile <value>
. za pomocąulimit
zmiany użytkownika root i spróbuj tego samego.źródło