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 penggunaan cpu secara real-time dalam output. Tolong bantu saya untuk meningkatkan perintah saya.
command-line
top
Ketan Patel
sumber
sumber
Jawaban:
Jika Anda mampu menunda satu detik, ini akan mencetak penggunaan CPU sebagai persentase sederhana:
(Tanpa penundaan satu detik,
vmstat
hanya dapat mencetak nilai rata-rata sejak booting.)sumber
vmstat 1 2
seperti ini:echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
Jika tidak, Andavmstat
akan memberikan nilai sejak boot yang kemungkinan bukan apa yang Anda cari.Ini adalah masalah yang diketahui
top
. Seperti yang dijelaskan di sini , iterasi pertamatop -b
mengembalikan persentase sejak boot, oleh karena itu kita memerlukan setidaknya dua iterasi (-n 2
) untuk mendapatkan persentase saat ini. Untuk mempercepat, Anda dapat mengaturd
elay di antara iterasi0.01
.top
membagi penggunaan CPU antara pengguna, proses sistem dannice
proses, kami ingin jumlah dari ketiganya. Akhirnya, Andagrep
baris yang berisi persentase CPU dan kemudian gunakangawk
untuk menjumlahkan pengguna, sistem dan proses yang bagus:sumber
top
akan melaporkan penggunaan% sebagai persentase dari satu CPU. Ini berarti Anda akan sering mendapatkan persentase yang jauh lebih tinggi. Lihat poin 9 di sini .top
dalam mode interaktif (jalankan sajatop
) dan, begitu ada, tekanI
(shift + i) untuk melihat gangguan oleh core.Saya telah mencoba beberapa cara, tetapi menurut saya ini yang paling akurat:
Dapat dari sini
sumber
%.1f
yang menurut saya lebih manusiawi dan bermanfaat jika Anda menggunakan output itu di skrip lain.Gunakan
-n2
. Ini akan menghasilkan dua baris. Waktu pertamatop
mencetak garis tidak memenuhi syarat untuk keadaan pada saat itu. Kemudian sesuaikan skrip Anda untuk mengabaikan baris pertama.sumber