Jak mogę ograniczyć użycie pamięci RAM dla konkretnego użytkownika lub procesu?

8

Korzystam z usługi w tle, która od czasu do czasu przecieka pamięć. Aby zapobiec użyciu Alt+ SysRq REISUB[ 1 ], chciałbym ograniczyć użycie pamięci RAM dla jednego procesu lub użytkownika systemu.

Naprawdę chciałbym powiedzieć: Użytkownik x może użyć maksymalnej ilości pamięci RAM wynoszącej 1 GB.

Czy to jest wykonalne? Czy potrzebuję do tego rodzaju maszyny wirtualnej? Używam Ubuntu 9.10.

guerda
źródło

Odpowiedzi:

10

ulimit jest twoim przyjacielem. Sprawdź flagę -m. Myślę , że ustawiłeś to przed uruchomieniem procesu i ma on zastosowanie od tego momentu (w bieżącej powłoce).

basszero
źródło
Dzięki, miła wskazówka! Jak rozumiem ulimit, ogranicza pamięć wszystkich użytkowników / proces / jakiekolwiek zużycie. Chciałbym ograniczyć to do jednego użytkownika / procesu i podprocesów.
guerda,
1
ulimit jest poleceniem powłoki i wpływa tylko na procesy uruchomione z tej samej powłoki po wykonaniu ulimit. Proces uruchamiasz w skrypcie powłoki za pomocą komendy ulimit, aby wpłynął tylko na ten proces.
KeithB,
4

Oprócz poleceń powłoki ulimit(dla bash) lub limit(dla csh), możesz kontrolować to z wnętrza kodu za pomocą ulimit()funkcji.

KeithB
źródło
1
Obowiązkowe strony: linux.die.net/man/1/ulimit (polecenie powłoki) i linux.die.net/man/3/ulimit (funkcja C).
Stephan202