Jak řekli jiní, nejlepší způsob je pravděpodobně top
. Potřebuje trochu doladit a trochu analyzovat, ale můžete jej získat tak, aby vám poskytl aktuální využití CPU v procentech.
top
rozdělí využití CPU mezi uživatele, systémové procesy a nice
procesy, chceme součet všech tří. Můžeme tedy spustit top
v b
atch mód, který nám umožňuje analyzovat jeho výstup. Nicméně, jak je zde vysvětleno, 1. iterace top -b
vrací procenta od spuštění, potřebujeme proto alespoň dvě iterace (-n 2
), abyste získali aktuální procento. Pro urychlení můžete nastavit d
prodleva mezi iteracemi na 0.01
. Nakonec grep
řádek obsahující procenta CPU a poté použijte gawk
shrnout uživatelské, systémové a pěkné procesy:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
Myslel jsem, že tyto informace můžete získat také prostřednictvím ps -o pcpu ax
přidáním % využití každého běžícího procesu. Bohužel, jak je vysvětleno zde, ps
"vrací procento času stráveného během celé životnosti procesu", což není to, co potřebujete.
UPRAVIT
Na základě vašeho komentáře vaše verze top
se liší od mého a měli byste místo toho použít toto:
top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
A abyste se vyhnuli problémům s lokalizací, nastavte národní prostředí na C:
LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
sar
je definitivní způsob, jak to udělat. Například sar -u
vypíše něco takového:
08:30:01 AM CPU %user %nice %system %iowait %idle
08:40:01 AM all 6.94 0.00 1.77 4.92 86.36
08:50:01 AM all 5.73 0.00 2.31 12.72 79.24
09:00:01 AM all 5.95 0.00 2.58 18.36 73.11
09:10:01 AM all 6.88 0.00 2.22 17.44 73.45
09:20:01 AM all 8.61 0.00 2.68 27.93 60.78
Neříkáte, který Linux používáte, ale pro CentOS/RedHat musíte nainstalovat sysstat
a myslím, že je to stejné na Debianu/Ubuntu.
Můžete také použít sar ke shromažďování statistik ad hoc :
sar -o /tmp/sar.out 60 600
Bude sbírat statistiky každých 60 sekund 600krát, tedy 600 minut.