CPU kullanımını gerçek zamanlı olarak alma


11

Ben cpu kullanımı almak için aşağıdaki komutu yürüttüğümde, ben güzel + kullanıcı cpu kullanımı olsun.

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 

Çıktı:

14.5

Burada sorun alıyorum çıktı üst komuta bağlıdır, bu yüzden anında üst komut olarak değişmez. Bu yüzden anında doğru cpu almıyorum. Aynı çıktıyı verir ve değişmez.

Çıktıda gerçek zamanlı işlemci kullanımı elde etmek istiyorum. Lütfen komutumu geliştirmeme yardım et.


gerçek zamanlı izleme askubuntu.com/questions/293426/…
Qasim

Bu basit bash betiği tam olarak bunu yapar: askubuntu.com/a/450136/243213
Craig van Tonder

Yanıtlar:


20

Bir saniyelik bir gecikmeyi göze alabiliyorsanız, CPU kullanımı basit bir yüzde olarak yazdırılır:

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]

(Bir saniyelik gecikme olmadan, vmstatönyüklemeden bu yana yalnızca ortalama değerleri yazdırabilir.)


Bana doğru bir% vermez (htop ile karşılaştırıldığında)
lepe

1
Bunun vmstat 1 2gibi kullanmanız gerekir : echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')] Aksi takdirde, önyüklemeden bu yanavmstat değer vereceksiniz , ki bu muhtemelen peşinde olduğunuz şey değildir.
Joe

joe teşekkürler işe yarıyor. lütfen Paul, yanıtı düzenleyin böylece herkes doğru komut satırını görebilir
Pavlos Theodorou

Yakaladığınız için teşekkürler, Joe ve Pavlos! Man sayfasının o kısmını fark etmedim.
Paul

9

Bu bilinen bir sorundur top. As açıkladı Burada 1. yineleme, top -bçizme beri getiri yüzdeleri, bu nedenle (en az iki tekrarlamalar ihtiyaç -n 2) geçerli yüzdesini alır. Bir şeyleri hızlandırmak için, diterasyonlar arasındaki gecikmeyi ayarlayabilirsiniz 0.01. topkullanıcı, sistem işlemleri ve nicesüreçler arasında CPU kullanımını böler , üçünün toplamını istiyoruz. Son olarak, grepCPU yüzdelerini içeren satır ve daha sonra gawkkullanıcı, sistem ve güzel süreçleri toplamak için kullanın :

    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

Sar, mpstat ... vb. Dahil olmak üzere diğer tüm yöntemler% 2/3 gösterirken, bu komut her zaman% 50 gösterir.
CMCDragonkai

@CMCDragonkai numaralar değişmeli (az önce kontrol ettim) Doğru kopyaladığınızdan / yapıştırdığınızdan emin misiniz? Ayrıca, birden fazla CPU'lu sistemlerde top,% kullanımı tek bir CPU'nun yüzdesi olarak bildirecektir . Bu, genellikle daha yüksek yüzdeler elde edeceğiniz anlamına gelir. Bkz . Buradaki 9. nokta .
terdon

Bu komutun sistemimle uyumlu olmayabileceğini düşünüyorum. Ancak denediğim diğer tüm yöntemlerin bana% 1/2/3 oranında sahip olduğu açıktır, bu da htop çalıştırırsam gördüğüm şeydir, oysa bu komut bana bir anomali verir.
CMCDragonkai

@CMCDragonkai birden fazla CPU nedeniyle. Bununla döndürülen sayıyı alabilir ve çekirdek sayısına bölebilir veya topetkileşimli modda kullanabilirsiniz (sadece çalıştırın top) ve bir kez orada Içekirdeklere göre bir döküm görmek için (shift + i) tuşlarına basın.
terdon

Sadece 1 CPU'm var.
CMCDragonkai

7

Birkaç yol denedim, ama bu bana en doğru görünüyor:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'

Buradan anladım


linux'um (Linux makine_adı 4.4.0-127-jenerik # 153-Ubuntu SMP Cmt 19 Mayıs 10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux) 15 $ sütunu (/ proc / stat dosyasının cpu satırı) yok : cpu 17411187 27478 594887 646652526 585551 0 31838 0 0 0
Kemin Zhou

1
En iyi cevap! Teşekkürler! Varyasyonum: kedi <(grep 'cpu' / proc / stat) <(uyku 0.1 && grep 'cpu' / proc / stat) | awk -v RS = "" '{printf "% .1f", (13 $ - 2 $ + 15 $ - 4 $) * 100 / (13 $ - 2 $ + 15 $ - 4 $ + 16 $ - 5 $)}'
maXp

maXp farkı, tek bir ondalık ile yuvarlatılmış olarak basılmasıdır: %.1fbence bu çıktıyı diğer komut dosyalarında kullanırsanız daha insan tarafından okunabilir ve yararlıdır.
lepe

0

Kullanın -n2. Bu iki satır çıkarır. 1. kez topbaskılar, o zamandaki durum için uygun olmayan çizgiyi yazdırır. Ardından, komut satırınızı ilk satırı yoksayacak şekilde ayarlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.