Apa metode yang tersedia untuk mendapatkan penggunaan CPU di Linux Command line? [Tutup]

12

Kita tahu itu topadalah perintah untuk mendapatkan penggunaan CPU di Linux dan cara lain termasuk cat /proc/statyang digunakan oleh top.

Apa metode lain untuk mendapatkan penggunaan CPU di baris perintah Linux?

Skenario use case: Output dari perintah ini akan digunakan oleh skrip untuk mencatat penggunaan CPU secara terus menerus. topdan /proc/statmemberikan detail penggunaan yang sulit untuk dicatat. Apakah ada cara yang lebih mudah untuk mendapatkan info CPU?

fasil
sumber
3
apa yang salah dengan yang Anda kutip?
pataluc
@pataluc Ini memberikan informasi lebih rinci. Saya membutuhkan keseluruhan penggunaan CPU, katakanlah CPU bekas: 91% Mem Digunakan: 78% Mem Gratis: 22% sesuatu seperti ini ..
fasil
lihat jawaban Nathan ... Anda dapat sedhasilnya jika Anda hanya menginginkan nilainya.
pataluc
Voting untuk ditutup sebagai "tidak konstruktif". Dari superuser.com/help/dont-ask : " Untuk mencegah agar pertanyaan Anda tidak ditandai dan mungkin dihapus, hindari mengajukan pertanyaan subjektif di mana ... jawaban Anda diberikan bersama dengan pertanyaan itu, dan Anda mengharapkan lebih banyak jawaban: 'Saya menggunakan ______ untuk ______ , apa yang kamu gunakan?' "
bwDraco
3
@DragonLord sebenarnya, ada cara yang sangat terbatas untuk melakukan ini dan dua jawaban di sini sebenarnya berguna. Milik saya menunjukkan kesalahpahaman yang sangat umum tentang topdan yang lain memberikan perintah yang sangat berguna. Ini bukan saya menggunakan X, bagaimana dengan Anda? pertanyaan, tetapi Bagaimana saya melakukan X pertanyaan. Voting untuk dibuka kembali.
terdon

Jawaban:

14

Seperti yang orang lain katakan, cara terbaik mungkin top. Perlu sedikit penyesuaian dan sedikit penguraian tetapi Anda bisa mendapatkannya untuk memberi Anda penggunaan CPU saat ini sebagai persentase.

topmembagi penggunaan CPU antara pengguna, proses sistem dan niceproses, kami ingin jumlah dari ketiganya. Jadi, kita dapat menjalankan topdalam bmode atch yang memungkinkan kita untuk mengurai outputnya. Namun, seperti yang dijelaskan di sini , iterasi pertama top -bmengembalikan persentase sejak booting, oleh karena itu kami membutuhkan setidaknya dua iterasi ( -n 2) untuk mendapatkan persentase saat ini. Untuk mempercepat, Anda dapat mengatur delay di antara iterasi 0.01. Akhirnya, Anda grepbaris yang berisi persentase CPU dan kemudian gunakan gawkuntuk menjumlahkan pengguna, sistem dan proses yang bagus:

    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

Saya pikir Anda juga bisa mendapatkan informasi ini ps -o pcpu axdengan menambahkan% penggunaan setiap proses yang berjalan. Sayangnya, seperti yang dijelaskan di sini , ps"mengembalikan persentase waktu yang dihabiskan untuk menjalankan seluruh proses" yang bukan apa yang Anda butuhkan.


EDIT

Berdasarkan komentar Anda, versi Anda topberbeda dengan saya dan Anda harus menggunakan ini sebagai gantinya:

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

Dan, untuk menghindari masalah dengan pelokalan, setel lokal ke C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
terdon
sumber
Saya menghapus jawaban saya karena apa yang Anda katakan itu benar. Yang ini tampaknya menjadi metode yang valid.
Nathan C
@NathanC Saya pikir jawaban Anda benar juga, itu yang akan saya jawab. Lalu saya mengujinya dan terkejut :).
terdon
@terdon Terima kasih atas jawaban terinci Anda ... Saya tidak bisa mendapatkan output untuk perintah di atas. Apakah ada modifikasi sintaksis yang diperlukan ..
fasil
@fasil tidak, itu harus bekerja. Apa masalahnya? Ada pesan kesalahan?
terdon
@terdon Saya tidak mendapatkan output apa pun untuk perintah lengkap .. dengan #top -bn 2 -d 0,01 saya mendapatkan hasil lengkap tetapi dengan menambahkan grep '^% Cpu' Saya tidak melihat output apa pun hanya prompt yang mengembalikan tidak kesalahan ...
fasil
9

saradalah cara pasti untuk melakukannya. Jadi misalnya sar -uakan menampilkan sesuatu seperti ini:

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

Anda tidak mengatakan Linux mana yang Anda gunakan tetapi untuk CentOS / RedHat Anda harus menginstal sysstatpaket, dan saya pikir itu sama pada Debian / Ubuntu.

Anda juga dapat menggunakan sar untuk mengumpulkan statistik ad hoc :

sar -o /tmp/sar.out 60 600

Akan mengumpulkan statistik setiap 60 detik 600 kali, jadi 600 menit.

Philip Kearns
sumber
1
Anda mungkin harus mengatakannya berbeda. Baris yang Anda posting akan diukur setiap 60 detik, 600 kali. Cara saya membaca posting Anda adalah bahwa 600 adalah durasi, jadi jika saya menempatkan 30.600, itu akan memakan waktu setiap 30 detik selama 600 menit, namun itu benar-benar akan mengambil setiap 30 detik 600 kali.
James McDonnell