Jaka jest różnica między twardymi i miękkimi limitami w ulimit?
Dla liczby otwartych plików mam miękki limit 1024 i twardy limit 10240. Możliwe jest uruchamianie programów otwierających więcej niż 1024 pliki. Jaki jest limit miękki?
Jaka jest różnica między twardymi i miękkimi limitami w ulimit?
Dla liczby otwartych plików mam miękki limit 1024 i twardy limit 10240. Możliwe jest uruchamianie programów otwierających więcej niż 1024 pliki. Jaki jest limit miękki?
Odpowiedzi:
Twardy limit może zostać podniesiony tylko przez root (dowolny proces może go obniżyć). Jest to więc przydatne dla bezpieczeństwa: proces inny niż root nie może przekroczyć twardego limitu. Ale niewygodne jest to, że proces inny niż root nie może mieć niższego limitu niż jego potomne.
Limit miękki może być zmieniony przez proces w dowolnym momencie. Jest to więc wygodne, o ile procesy współpracują, ale nie ma wpływu na bezpieczeństwo.
Typowym przypadkiem użycia limitów miękkich jest wyłączenie zrzutów pamięci ( ulimit -Sc 0
) przy jednoczesnym zachowaniu opcji włączenia ich dla określonego procesu, który debugujesz ( (ulimit -Sc unlimited; myprocess)
).
Polecenie ulimit
powłoki jest otoczką setrlimit
wywołania systemowego, więc tam znajdziesz ostateczną dokumentację.
Pamiętaj, że niektóre systemy mogą nie implementować wszystkich limitów. W szczególności niektóre systemy nie obsługują limitów deskryptorów plików na proces (Linux ma); jeśli twoje nie, polecenie powłoki może nie działać.
ulimit -m
, RLIMIT_RSS
) jest przykładem limitu, który nie działa już w systemie Linux. Jednak limit pamięci wirtualnej ( ulimit -v
, RLIMIT_AS
) działa.
setrlimit
(w zakresie dozwolonym przez twardy limit, chyba że działa jako root). Większość programów nie ma polecenia, które pozwala użytkownikowi to zrobić, ale możesz spróbować dołączyć się do programu za pomocą debugera i sprawić, że wyda setrlimit
wywołanie, lub w Linuksie możesz zadzwonić prlimit
(dla którego nie znam żadnej powłoki użyteczność).
prlimit
też narzędzie powłoki.
Twardy limit służy celom bezpieczeństwa. W przypadku użytkownika innego niż root może on jedynie zmniejszyć twardy limit z obecnie ustawionego twardego limitu; nie może tego zwiększyć. Zwiększenie twardego limitu może być wykonane tylko przez użytkownika root (a może z uprawnieniami sudo, nie jestem pewien). Użytkownik inny niż root może wybrać limit (zwany miękkim limitem), który może zawierać się w przedziale [0, twardy limit] dla swoich procesów. Jest to miękki limit, który jest widziany i brany pod uwagę przez procesy.
ulimit -n
? Spróbuj uruchomić powłokę o bardzo niskiej wartości (bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
). Jaka jest wydajność?