ulimit
jest wbudowaną powłoką, a nie zewnętrznym poleceniem. Należy go wbudować, ponieważ działa on na sam proces powłoki, taki jak cd
: 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ływanego sudo
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 linie
paislee hard nofile 4096
paislee soft nofile 1024
gdzie 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, uruchom
ulimit -Sn unlimited
podnieść miękki limit do twardego.
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).