Ketika saya menjalankan perintah berikut untuk mendapatkan penggunaan CPU, saya mendapatkan penggunaan pengguna CPU yang bagus.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Keluaran:
14.5
Di sini saya mendapatkan masalah adalah bahwa output tergantung pada perintah atas sehingga tidak langsung berubah sebagai perintah atas. Jadi saya tidak mendapatkan cpu yang benar secara instan. Ini memberikan output yang sama dan tidak berubah.
Saya ingin mendapatkan output realtime. Tolong bantu saya untuk meningkatkan perintah saya.
command-line
cpu
Ketan Patel
sumber
sumber
time
. Di sistem saya hanya dibutuhkan 0,165s.time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
Jawaban:
Anda benar,
top
tampaknya memberikan penggunaan CPU yang salah pada iterasi pertama. Anda dapat mengatasi masalah ini seperti ini:Ini tentu saja akan memakan waktu dua kali lebih banyak, tetapi tetap akan berhasil.
Jika Anda tetap menginginkannya bekerja lebih cepat, Anda dapat menggunakan
-d
opsi, misalnya untuk periode pengukuran total 1 detik, gunakan setengahnya:sumber
Secara teknis yang pertama
top
tidak selalu menghasilkan nilai yang sama; itu hanya menampilkan beban CPU rata-rata sejak boot terakhir. Karenatop
menggunakan delta/proc/stat
statistik untuk menghitung beban CPU, nilai pertama dihitung sambil membandingkan dengan nol, menghasilkan hasil yang salah (tapi WAD).Jika Anda tidak ingin menggunakan
top
, Anda dapat langsung menguraikan/proc/stat
:Ini juga lebih cepat dan lebih akurat dengan cara ini.
Anda dapat mengujinya dengan
stress
:Dan lakukan
setelah.
sumber
watch
dapat dijalankan di atasnya:watch -n1 "bash ./cpu"
/proc/stat
cukup keren tetapi tampaknya memiliki kelemahan yang sama dengan iterasi pertama atas: Ini menghasilkan rata-rata beban CPU sejak boot terakhir, bukan yang sekarang.Hanya untuk memperluas jawaban @ Ruslan,
top
membagi penggunaan CPU antara pengguna, proses sistem dannice
proses, kami ingin jumlah dari ketiganya. Jadi, kita bisa menjalankantop
dalamb
mode atch yang memungkinkan kita untuk mengurai outputnya. Namun, seperti yang dijelaskan di sini , iterasi pertamatop -b
mengembalikan persentase sejak booting, oleh karena itu kami membutuhkan setidaknya dua iterasi (-n 2
) untuk mendapatkan persentase saat ini. Untuk mempercepat, Anda dapat mengaturd
elay antara iterasi ke0.01
:sumber
Mungkin gunakan yang ini berdasarkan
ps
output:sumber
Gunakan perintah arloji atau untuk loop in shell,
yaitu
watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"
sumber
Mengapa Anda peduli dengan penggunaan CPU? The beban rata-rata adalah indikator yang lebih baik banyak:
Jika Anda benar-benar membutuhkan penggunaan CPU, parsing
/proc/stat
mungkin adalah cara yang harus dilakukan.sumber
/proc/stat
tidak memberikan penggunaan CPU seperti itu, kita harus membacanya dua kali dengan beberapa waktu antara membaca dan melakukan beberapa perhitungan untuk mendapatkan penggunaan CPU. Inilah yangtop
dilakukannya.Menggunakan
sar
perintahItu berarti: dapatkan hasil 10 kali dalam setiap detik
sumber