Seperti yang dikatakan orang lain, cara terbaik mungkin adalah top
. Perlu sedikit penyesuaian dan penguraian, tetapi Anda bisa mendapatkannya untuk memberi Anda penggunaan CPU saat ini sebagai persentase.
top
membagi penggunaan CPU antara pengguna, proses sistem, dan nice
proses, kami ingin jumlah dari tiga. Jadi, kita bisa menjalankan top
di b
mode atch yang memungkinkan kita mengurai hasilnya. Namun, seperti yang dijelaskan di sini, iterasi pertama dari top -b
mengembalikan persentase sejak boot, oleh karena itu kita memerlukan setidaknya dua iterasi (-n 2
) untuk mendapatkan persentase saat ini. Untuk mempercepat, Anda dapat menyetel d
elay antara iterasi ke 0.01
. Terakhir, Anda grep
baris yang berisi persentase CPU dan kemudian gunakan gawk
untuk 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 melalui ps -o pcpu ax
dengan menambahkan %use dari setiap proses yang berjalan. Sayangnya, seperti yang dijelaskan di sini, ps
"mengembalikan persentase waktu yang dihabiskan untuk menjalankan seluruh masa proses" yang bukan itu yang Anda butuhkan.
EDIT
Berdasarkan komentar Anda, versi top
Anda berbeda dengan milik 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 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}'
sar
adalah cara pasti untuk melakukannya. Jadi misalnya sar -u
akan 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 menyebutkan Linux mana yang Anda gunakan tetapi untuk CentOS/RedHat Anda perlu menginstal sysstat
paket, dan saya pikir itu sama di 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 sebanyak 600 kali, jadi 600 menit.