omezte využití paměti pro jeden proces v systému linux
<p>používám <code>pdftoppm</code> pro převedení poskytovaného uživatelem pdf na obrázek 300dpi. funguje to skvěle, s výjimkou případů, kdy uživatel poskytne pdf) = s velmi velkou velikostí stránky. <code>pdftoppm</code> přidělí dostatek paměti pro uložení obrazu 300dpi této velikosti v paměti, což je pro 100 čtvereční stránku čtverce 100 * 300 * 100 * 300 * 4 bajty na pixel = 3.5gb. uživatel se zlými úmysly mi mohl dát jen hloupé velké pdf) a způsobit všechny druhy problémů.</p><p>to, co bych chtěl udělat, je dát nějaký pevný limit využití paměti pro podřízený proces, který se chystám spustit - prostě nechte proces zemřít, pokud se pokusí přidělit více než, řekněme, 500 mb paměti. je to možné?</p><p>nemyslím si, že na to může být použit ulimit, ale existuje ekvivalent jednoho procesu?</p>
<p>s ulimitem jsou nějaké problémy. zde je užitečné přečíst si toto téma: <a href="http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/40">omezení času a spotřeby paměti programu v linux</a> , což vede k nástroji <a href="https://github.com/pshved/timeout">timeout</a> , který vám umožní proces v kleci (a jeho vidličky) ) podle času nebo spotřeby paměti.</p><p>nástroj timeout vyžaduje perl 5+ a <code>/proc</code> připojený souborový systém. poté zkopírujete nástroj do např. <code>/usr/local/bin</code> jako tak:</p><pre><code>curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | \ sudo tee /usr/local/bin/timeout &amp;&amp; sudo chmod 755 /usr/local/bin/timeout </code></pre><p>poté můžete svůj proces „klecovat“ podle spotřeby paměti jako ve vaší otázce:</p><pre><code>timeout -m 500 pdftoppm sample.pdf </code></pre><p>nebo můžete použít <code>-t &lt;seconds&gt;</code> a <code>-x &lt;hertz&gt;</code> pro omezení procesu podle času nebo omezení cpu.</p><p>způsob, jakým tento nástroj funguje, je několikanásobná kontrola za sekundu, pokud proces tření nepřesáhl stanovené hranice. to znamená, že ve skutečnosti existuje malé okno, ve kterém by proces <em> mohl potenciálně </em> být nadměrně odebírat před vypršením časového limitu a proces zabije.</p><p>správnější přístup by tedy pravděpodobně zahrnoval cgroups, ale to je mnohem více zapojeno do nastavení, i když byste použili docker nebo runc, což mimo jiné nabízí uživatelsky příjemnější abstrakci kolem cgroups.</p>
Co takhle to jako normální člověk zabalit do více souborů třeba po 2GB? Rozhodně je to lepší řešení i pro lidi s pomalejším připojením navíc v případě FREE stahování na Uloz.to půjde stahovat všechny části na jednou místo stahování jednoho velkého souboru pomalou rychlostí. ![](/Client.Images/smileys/11.gif) Tak snad vidíš ve Správci úloh, který proces žere paměť, ne? Nebo to je zadání tipovačky?A když už si to budeš prohlížet, podívej se i na vytížení CPU. A co řešíš, tobě ten počítač nefunguje? Ty procesy atd. se spouští tak, že počítač zatěžují jen minimálně, není na tom co optimalizovat. Ale jestli chceš počítač ovládat jen ty sám, tak ho odpoj od internetu. Nebo:[http://www.alza.cz/gigabyte-b85m-d3h-d436674...](http://www.alza.cz/gigabyte-b85m-d3h-d436674.htm)  [http://www.alza.cz/intel-core-i3-4130-d46774...](http://www.alza.cz/intel-core-i3-4130-d467741.htm)  a paměti, které umí pracovat s napětím 1,5V. njn 128GB je opravdu málo. celý jsi to rozesral. ![](/Client.Images/smileys/1.gif) Predne si tu max. linkovou rychlost na pevno snizte na max. 3Mbps (a zkuste i mene). Hned pojede leccos lip. Na vytváření dokumentu v pdf používám PDFcreator a tam to vše lze nastavit - zakázat tisk, kopírování nebo ochranu heslem. Když se ví jak, dá se to stejně prolomit. s temi 3GHz na jadro jsem to trosku prehnal muze to byt i mene:) hlavne at je to ve vysledku poznat ten upgrade. moc dik za rady![](/Client.Images/smileys/4.gif) Musi to mit 1GB. Linux je +/- narocny stejne, je to jen jadro ktery pouzivaji vsechny distribuce. Dulezity je hlavne zvolene graficke prostredi a aplikace ktere budes pouzivat. Tech 1G ram je dost kritickych, premyslel bych pridat jeste 1G modul. A treba Debian + LXDE, nebo OpenBox pokud to ustojis![](/Client.Images/smileys/1.gif)[https://www.debian.org/releases/stable/i386/ch03...](https://www.debian.org/releases/stable/i386/ch03s04.html.en)