ulimit PICKLE: „Operacja niedozwolona” i „Nie znaleziono polecenia”


15

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

  1. Jak zwiększyć ulimit?
  2. Dlaczego to się dzieje?

Korzystanie z Fedory 14


Odpowiedź na usunięty komentarz: ulimit 4096nie działa. Myślę, że -njest poprawny. Jako dowód koncepcji działa, jeśli najpierw sudo su - root(ale tylko zmiany dla roota).
paislee


Odpowiedzi:


17

ulimitjest 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 sudotylko 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.confdodaj linie

paislee hard nofile 4096
paislee soft nofile 1024

gdzie paisleejest 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.


1
Alternatywami sudo bash -csą, sudo -iktóre uruchamiają powłokę logowania i sudo -sktóre uruchamiają powłokę. Obowiązują te same ograniczenia, ale może to być przydatne w innych okolicznościach.
Bram

Dzięki. Czy mogę zadać kilka powiązanych pytań? Inne odpowiedzi i posty stackoverflow.com/a/17483998/156458 i unix.stackexchange.com/a/238413/674 i unix.stackexchange.com/a/169035/674 wszystkie zalecane za pomocą sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Ale zarówno ulimit -c 1024i exec su $LOGNAME" dotyczy tylko powłoka utworzona przez sudo, 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.
Tim

Pamiętaj, że ulimit -Sn unlimitednie działa na większości powłok. Właściwą metodą jest zadzwonić, ulimit -aa następnie zadzwonić ulimit -n <number>tam, gdzie <liczba to twardy limit (prawa kolumna).
szczęśliwie

3

otwórz plik /etc/security/limits.confi dodaj linię <user> soft nofile <value>. za pomocą ulimitzmiany użytkownika root i spróbuj tego samego.

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.