GNU/Linux >> Znalost Linux >  >> Linux

Linux – Omezit využití paměti pro jeden linuxový proces?

Používám pdftoppm pro převod uživatelem poskytnutého PDF na obrázek s rozlišením 300 DPI. To funguje skvěle, kromě případů, kdy uživatel poskytne PDF s velmi velkou velikostí stránky. pdftoppm přidělí dostatek paměti pro uložení obrázku o velikosti 300 DPI v paměti, což pro čtvercovou stránku o velikosti 100 palců je 100*300*100*300*4 bajty na pixel =3,5 GB. Uživatel se zlými úmysly by mi mohl dát hloupě velké PDF a způsobit různé problémy.

Takže bych chtěl udělat nějaký pevný limit na využití paměti pro podřízený proces, který se chystám spustit – prostě nechat proces zemřít, pokud se pokusí alokovat více než řekněme 500 MB paměti. Je to možné?

Nemyslím si, že k tomu lze použít ulimit, ale existuje ekvivalent jednoho procesu?

Přijatá odpověď:

S ulimitem jsou nějaké problémy. Zde je užitečná četba na téma:Omezení spotřeby času a paměti programu v Linuxu, což vede k nástroji timeout, který vám umožňuje ukotvit proces (a jeho větve) podle spotřeby času nebo paměti.

Nástroj časového limitu vyžaduje Perl 5+ a /proc souborový systém připojen. Poté nástroj zkopírujete např. /usr/local/bin takhle:

curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | 
  sudo tee /usr/local/bin/timeout && sudo chmod 755 /usr/local/bin/timeout

Poté můžete svůj proces „uzavřet“ spotřebou paměti, jak je uvedeno ve vaší otázce:

timeout -m 500 pdftoppm Sample.pdf

Alternativně můžete použít -t <seconds> a -x <hertz> k omezení procesu podle času nebo omezení CPU.

Tento nástroj funguje tak, že několikrát za sekundu kontroluje, zda vytvořený proces nepřekročil své nastavené hranice. To znamená, že ve skutečnosti existuje malé okno, kde by proces potenciálně mohl předplatit, než si všimne vypršení časového limitu a ukončí proces.

Správnější přístup by tedy pravděpodobně zahrnoval cgroups, ale to je mnohem náročnější na nastavení, i když byste použili Docker nebo runC, které mimo jiné nabízejí uživatelsky přívětivější abstrakci kolem cgroups.


Linux
  1. Linux – skutečné využití paměti?

  2. Zkontrolujte limit otevřeného FD pro daný proces v Linuxu

  3. Omezte využití paměti pro jeden proces Linuxu

  1. Špičkové využití paměti procesem

  2. Jak se v Linuxu hlásí využití paměti?

  3. Graf využití paměti procesu v systému Linux

  1. Využití paměti Linuxu

  2. Uložte paměť linuxového procesu do souboru

  3. Ubuntu Linux:Proces swap paměti a využití paměti