Linux Komut satırında CPU kullanımını elde etmek için mevcut yöntemler nelerdir? [kapalı]


12

Bunun topLinux'ta CPU kullanımını elde etmek için bir komut olduğunu ve cat /proc/statüstte kullanılan diğer yolları da biliyoruz .

Linux komut satırında CPU kullanımını elde etmenin diğer yöntemleri nelerdir?

Senaryoyu kullan: Bu komutun çıktısı, CPU kullanımını sürekli olarak kaydetmek için bir komut dosyası tarafından kullanılacaktır. topve /proc/statgünlüğü zor olan detaylı kullanım sağlar. CPU bilgisini almanın daha kolay bir yolu var mı?


3
teklif ettiklerinizle ilgili sorun nedir?
pataluc

@pataluc Daha ayrıntılı bilgi verir. Genel bir CPU kullanımı gerekir CPU kullanılan demek: 91% Mem Kullanılan: 78% Mem Free:% 22 böyle bir şey ..
fasil

Nathan'ın cevabını görün ... sedsadece değeri istiyorsanız sonucu elde edebilirsiniz .
pataluc

Oylama "yapıcı değil" olarak kapatmak için. Gönderen superuser.com/help/dont-ask : " bayraklı ve muhtemelen önlemek ... Cevabınız soruyla birlikte sağlanır sübjektif sorular soran ve daha fazla cevap bekliyoruz çıkarılmasını sorunuzu önlemek için: 'kullandığım ______ için ______ , ne kullaniyorsun?' "
bwDraco

3
@DragonLord aslında bunu yapmanın oldukça sınırlı yolları var ve buradaki iki cevap aslında faydalı. Benimki çok yaygın bir yanlış anlama işaret ediyor topve diğeri çok faydalı bir emir veriyor. Bu bir değil ya sen ben kullanım X, nasıl? soru, ama X nasıl yapılır sorusu. Yeniden açmak için oylama.
terdon

Yanıtlar:


14

Diğerlerinin söylediği gibi, en iyi yol muhtemelen top. Biraz tweaking ve biraz ayrıştırma gerekiyor, ancak mevcut CPU kullanımını yüzde olarak vermek için alabilirsiniz.

topkullanıcı, sistem işlemleri ve nicesüreçler arasında CPU kullanımını böler , üçünün toplamını istiyoruz. Demek ki çalıştırabilirsiniz topiçinde bbize çıkışını ayrıştırmak olanak atch mod. Bununla birlikte, burada açıklandığı gibi , top -bönyüklemeden bu yana yüzdelerin 1. yinelemesi , bu nedenle -n 2mevcut yüzdeyi elde etmek için en az iki yinelemeye ( ) ihtiyacımız var . Bir şeyleri hızlandırmak için, diterasyonlar arasındaki gecikmeyi ayarlayabilirsiniz 0.01. 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

ps -o pcpu axHer çalışan işlemin% kullanımını ekleyerek de bu bilgiyi alabileceğinizi düşündüm . Ne yazık ki, burada açıklandığı gibi , ps"bir sürecin tüm ömrü boyunca çalıştırmak için harcanan sürenin yüzdesini döndürür", bu da ihtiyacınız olan şey değildir.


DÜZENLE

topYorumunuza dayanarak, sürümünüz benimkinden farklı ve bunun yerine bunu kullanmalısınız:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Yerelleştirmeyle ilgili sorunları önlemek için yerel ayarı C olarak ayarlayın:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Cevabımı sildim çünkü söylediklerin doğru. Bu geçerli bir yöntem gibi görünüyor.
Nathan C

@NathanC Cevabınızın da doğru olduğunu düşündüm, cevap vereceğim buydu. Sonra test ettim ve şaşırdım :).
terdon

@terdon Ayrıntılı cevabınız için teşekkürler ... Yukarıdaki komutun çıktısını alamadım. Gerekli herhangi bir sözdizimsel değişiklik var mı ..
fasil

@Fasil Hayır, Çalışmalı. Sorun nedir? Hata mesajı var mı?
terdon

@terdon Komut için herhangi bir çıktı almıyorum .. #top -bn 2 -d 0.01 ile Tam sonucu alıyorum ama grep '^% Cpu' eklerken herhangi bir çıktı görmüyorum sadece bilgi istemleri hayır döndürüyor hata ...
fasil

9

sarbunu yapmanın kesin yoludur. Örneğin sar -u, şöyle bir şey çıktılar:

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

Hangi Linux'u kullandığınızı söylemiyorsunuz, ancak CentOS / RedHat için sysstatpaketi yüklemeniz gerekiyor ve bence Debian / Ubuntu'da da aynı.

Sar istatistiklerini özel olarak toplamak için de kullanabilirsiniz :

sar -o /tmp/sar.out 60 600

Her 60 saniyede bir 600 kez, yani 600 dakikada bir istatistik toplar.


1
Muhtemelen farklı ifade etmelisiniz. Gönderdiğiniz satır her 60 saniyede bir 600 kez ölçülecektir. Gönderinizi okuma şeklim, 600'ün bir süre olmasıydı, bu yüzden 30 600'ü koyarsam, 600 dakika boyunca her 30 saniyede bir sürecek, ancak aslında her 30 saniyede bir 600 kez alacaktı.
James McDonnell
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.