CPULimit je přesně to, co potřebujete. Spustíte program a poté spustíte cppulimit proti názvu programu nebo PID, přičemž určíte, na jaké procento chcete omezit.
Následující příkaz omezuje proces při PID 7777 na 5 % využití CPU.
cpulimit -p 7777 -l 5
Případně můžete použít název spustitelného souboru:
cpulimit -e myprogram -l 5
Nebo absolutní cesta ke spustitelnému souboru:
cpulimit -P /path/to/myprogram -l 5
Všimněte si, že procento je ze všech jader; takže pokud máte 4 jádra, můžete použít 400 %.
Běžícímu procesu můžete udělit větší či menší prioritu (tzv. „hezká hodnota“). Všimněte si, že škála priorit UNIXu je poněkud kontraintuitivní:záporné hodnoty znamenají, že proces je upřednostňován před souběžnými procesy, tj. má „více“ priority.
Můžete se tak pokusit „zpomalit“ váš proces daný jeho PID pomocí:
# lower priority of a process
renice +1 "PID"
Pokaždé, když to spustíte, proces "hezká hodnota" se zvýší o 1; můžete použít jiné celočíselné hodnoty než +1
samozřejmě.
Příkaz nice vám umožňuje spustit proces s úpravou hodnoty nice +10 (toto změňte pomocí volby -n
). Například:
# start a CPU-intensive task with low priority
nice ./cpu-hog
„Pěkná hodnota“ však ovlivňuje pouze to, jak moc plánovač upřednostňuje spouštění konkrétního procesu před ostatními v systému:pokud je váš počítač v podstatě nečinný, zvýšení „hodnoty pěkného“ jednoho jednotlivého procesu nebude zabránit tomu, aby tento proces zabíral 100 % CPU. Cituji z manuálové stránky getpriority(2):(Zdůrazněno mnou.)
Míra, do jaké jejich relativní pěkná hodnota ovlivňuje plánování procesů, se liší v různých systémech Unix a na Linuxu ve verzích napříč jádry. Počínaje jádrem 2.6.23 Linux přijal algoritmus, který způsobuje, že relativní rozdíly v hodnotách nice mají mnohem silnější účinek. To způsobuje velmi nízké pěkné hodnoty (+19), které skutečně poskytují málo CPU procesu když existuje nějaký jiný _zatížení systému s vyšší prioritou._
Důvod spočívá ve způsobu, jakým jsou procesy spouštěny na jádře podobném UNIXu:pokaždé, když se jádro rozhodne spustit proces, má tento proces po určitou (pevnou a krátkou) dobu plnou kontrolu nad jádrem CPU. "Pěkná hodnota" může ovlivnit, jak často je kernelscheduler ochoten dát procesu časový úsek, ale nemůžete změnit skutečnost, že jakmile je proces naplánován, běží nerušeně po pevně stanovenou dobu.
Proto kromě zpomalení vašeho CPU neexistuje způsob, jak zpomalit běh procesu, pokud v systému nejsou žádné další procesy, které by mohly bojovat o přístup k CPU.
skupiny cgroups byly vytvořeny přesně z tohoto důvodu.
http://www.kernel.org/doc/Documentation/cgroups/http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
Chvíli trvá, než se s nimi seznámíte, a věřím, že k jejich nastavení potřebujete přístup root, ale vše lze naskriptovat. Novější Ubuntus má soubor .conf, takže nemusíte psát svůj vlastní skript. Nejsem si jistý ohledně 10.10.
Pěkné místo pro začátek je v této odpovědi:https://askubuntu.com/a/94743/170177
Pamatujte, že cgroups je stále ve fázi aktivního vývoje, takže některé funkce nemusí být ve vašem aktuálním jádře dostupné.
Pomocí cpu.shares cgroups nedělá nic pěkného hodnota by nefungovala. Zní to, jako byste ve skutečnosti chtěli procesy omezit, což lze rozhodně udělat.
Budete muset použít jeden nebo dva skripty a/nebo upravit /etc/cgconfig.conf pro definování požadovaných parametrů.
Konkrétně chcete upravit hodnoty cpu.cfs_period_us a cpu.cfs_quota_us . Proces pak bude moci běžet pro cpu.cfs_quota_us mikrosekund za cpu.cfs_period_us mikrosekundách.
Například:
Pokud cpu.cfs_period_us =50 000 a cpu.cfs_quota_us =10 000 pak proces obdrží 20 % maximálního času CPU, bez ohledu na to, co se děje.
Na tomto snímku obrazovky jsem procesu přidělil 2 % času CPU:
Pokud jde o proces, běží na 100 %.
Nastavení cpu.shares na druhou stranu může a bude stále využívat 100 % nečinného CPU času.
V tomto podobném příkladu jsem uvedl proces cpu.shares =100 (z 1024):
Jak můžete vidět, proces stále spotřebovává veškerý nečinný čas CPU.
Reference:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.htmlhttp://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups. html