@julesanchez nilai perlu disalurkan di tempat lain, maka itu harus berupa int
user1199739
melakukan top> myfile.txt Dan menerapkan filter Anda di pasca perawatan, tidak apa-apa?
JuSchz
11
Perintah yang tidak memerlukan sysstat:ps -A -o pcpu | tail -n+2 | paste -sd+ | bc
RFon
7
Pembukaan kembali Saya tidak mengerti mengapa ini dianggap di luar topik, dapatkah orang yang menutupnya peduli untuk menjelaskan?
Jonathan H
3
Pemahaman saya tentang /proc/statsangat terbatas, tapi ini satu-kapal bekerja cukup baik bagi saya: cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.2f%\n", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'. Dengan% .2f Anda dapat mengontrol jumlah desimal yang ingin Anda hasilkan, dan dengan sleep 1Anda dapat mengatur waktu rata-rata yang Anda inginkan, yaitu, jika ia melakukan apa yang menurut saya dilakukan. Anda dapat meletakkannya dalam bash while, untuk mengujinya secara realtime.
Sunting silakan baca komentar sebelum menyalin-menempel ini atau menggunakan ini untuk pekerjaan serius. Ini tidak diuji atau digunakan, ini adalah ide untuk orang yang tidak ingin menginstal utilitas atau untuk sesuatu yang berfungsi dalam distribusi apa pun. Beberapa orang berpikir Anda dapat "apt-get install" apa saja.
CATATAN: ini bukan penggunaan CPU saat ini , tetapi penggunaan CPU secara keseluruhan di semua core sejak boot sistem. Ini bisa sangat berbeda dari penggunaan CPU saat ini. Untuk mendapatkan nilai saat ini, top (atau alat serupa) harus digunakan.
Penggunaan CPU saat ini dapat berpotensi dihitung dengan:
Tetapi Anda harus menginstal mpstat seperti yang Anda rekomendasikan di atas. Banyak orang tidak memiliki fleksibilitas itu. cat / proc / stat maka pipa jauh lebih mudah daripada mpstat yang Anda rekomendasikan.
vimdude
12
+1 Tidak mengerti mengapa parsing utilitas lain lebih baik daripada parsing/proc/stat
Reinstate Monica Please
9
sistem + pengguna + idle = 100%. Jadi mungkin sesuatu seperti: grep 'cpu' / proc / stat | awk '{cpu_usage = ($ 2 + $ 4) * 100 / ($ 2 + $ 4 + $ 5)} END {print cpu_usage "%"}'
vimdude
106
Saya pikir solusi ini tidak menunjukkan beban CPU saat ini tetapi beban CPU rata-rata sejak CPU dimulai.
Etienne
11
@ jlliagre, ya itu benar. Untuk menghitung penggunaan CPU saat ini bukan rata-rata, Anda harus mengambil nilai $ 1 kemudian menunda kemudian mengambil nilai $ 1 dan melihat perbedaannya. Itulah penggunaan cpu saat ini.
vimdude
102
Anda dapat mencoba:
top -bn1 | grep "Cpu(s)"| \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/"| \
awk '{print 100 - $1"%"}'
Setiap kali saya menjalankan perintah ini, saya mendapatkan output yang sama persis ( 32.7%).
alanaktion
13
Hasil yang lebih akurat diberikan ketika saya menggunakan top -bn2, tetapi itu membutuhkan waktu lama. Dari apa yang saya baca, ini tampaknya menjadi satu-satunya cara untuk mendapatkan hasil yang akurat.
alanaktion
6
top -bn1tampaknya sangat tidak akurat pada sistem FC20 saya. top -bn2tampaknya bekerja dengan baik.
Martin Tournoij
23
Perintah dalam jawaban ini tampaknya ditulis untuk sistem tempat top -vpengembalian procps-ng(misalnya, Fedora). Ada juga procps, ditemukan pada, misalnya, Ubuntu dan CentOS, di mana perintah tidak bekerja (selalu menunjukkan 100%, karena penguraian gagal karena garis dengan angka CPU diformat berbeda). Berikut adalah versi yang bekerja dengan kedua implementasi:top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'
Saya akan mengatakannya 100-% menganggur, itulah total penggunaan CPU (dalam%)
Peter Svensson
Itu persentase "tidak" digunakan. Jawaban ini bagus, sampai grep | ekor | bagian awk ...
jordanm
Saya akan mengubah awkbagian menjadi awk -F " " '{print (100 - $12)"%"}':, yang memberikan output diformat seperti yang dia inginkan, tetapi jika tidak, ini terlihat baik bagi saya.
Dan Fego
1
@jordanm Semua kebenaran; Saya lebih memilih itu karena berhasil. Saya akan melakukan ini secara pribadi:mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }'
Dan Fego
22
Mungkin juga memunculkan respons yang sebenarnya dengan solusi saya, yang terinspirasi oleh Peter Liljenberg:
Ini akan digunakan awkuntuk mencetak 100 minus bidang ke-12 (idle), dengan tanda persentase setelahnya. awkhanya akan melakukan ini untuk garis di mana bidang ke-12 hanya memiliki angka dan titik ( $12 ~ /[0-9]+/).
Anda juga dapat rata-rata lima sampel, satu detik terpisah:
$ mpstat 15| awk 'END{print 100-$NF"%"}'
Uji seperti ini:
$ mpstat 15| tee /dev/tty | awk 'END{print 100-$NF"%"}'
Lebih baik menjalankan "mpstat 2 1 | ..." sehingga ini menunjukkan statistik selama 1 detik terakhir. Jika tidak, secara default, mpstat menunjukkan statistik sejak awal dan itu tidak berubah banyak seiring berjalannya waktu
Sarang
1
"mpstat | awk '$ 12 ~ /[0-9.[+/ {print 100 - $ 11"% "}'" ini berfungsi untuk saya.
AloneInTheDark
@Sarang Terima kasih banyak !! Akhirnya saya bisa mendapatkan hasil yang conkyditampilkan juga. Sayangnya, baris ini SANGAT lambat, hampir membutuhkan satu detik untuk dieksekusi.
syntaxerror
6
@syntaxerror Dibutuhkan tepat 2 detik karena jika Anda melihat perintah membantu Anda melihat bahwa argumen pertama adalah bahwa itu interval tetapi hanya dieksekusi sekali karena argumen kedua sehingga menunggu 2 detik penuh sampai mengembalikan hasilnya.
Johan Bjäreholt
Pertanyaan ditutup, jadi tambahkan jawaban saya (serupa) kepada Anda :-) Semoga Anda tidak keberatan. Seperti Anda, saya terinspirasi oleh jawaban Peter Liljenberg.
PJ Brunet
16
DIedit: Saya perhatikan bahwa di pengguna lain, balasan% idle adalah isian 12 bukan isian 11. Awk telah diperbarui agar akun% isian isian menjadi variabel.
ps -A -o pcpu | tail -n+2 | paste -sd+ | bc
/proc/stat
sangat terbatas, tapi ini satu-kapal bekerja cukup baik bagi saya:cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.2f%\n", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'
. Dengan% .2f Anda dapat mengontrol jumlah desimal yang ingin Anda hasilkan, dan dengansleep 1
Anda dapat mengatur waktu rata-rata yang Anda inginkan, yaitu, jika ia melakukan apa yang menurut saya dilakukan. Anda dapat meletakkannya dalam bash while, untuk mengujinya secara realtime.Jawaban:
Melihat
cat /proc/stat
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
Sunting silakan baca komentar sebelum menyalin-menempel ini atau menggunakan ini untuk pekerjaan serius. Ini tidak diuji atau digunakan, ini adalah ide untuk orang yang tidak ingin menginstal utilitas atau untuk sesuatu yang berfungsi dalam distribusi apa pun. Beberapa orang berpikir Anda dapat "apt-get install" apa saja.
CATATAN: ini bukan penggunaan CPU saat ini , tetapi penggunaan CPU secara keseluruhan di semua core sejak boot sistem. Ini bisa sangat berbeda dari penggunaan CPU saat ini. Untuk mendapatkan nilai saat ini, top (atau alat serupa) harus digunakan.
Penggunaan CPU saat ini dapat berpotensi dihitung dengan:
sumber
/proc/stat
Anda dapat mencoba:
sumber
32.7%
).top -bn2
, tetapi itu membutuhkan waktu lama. Dari apa yang saya baca, ini tampaknya menjadi satu-satunya cara untuk mendapatkan hasil yang akurat.top -bn1
tampaknya sangat tidak akurat pada sistem FC20 saya.top -bn2
tampaknya bekerja dengan baik.top -v
pengembalianprocps-ng
(misalnya, Fedora). Ada jugaprocps
, ditemukan pada, misalnya, Ubuntu dan CentOS, di mana perintah tidak bekerja (selalu menunjukkan 100%, karena penguraian gagal karena garis dengan angka CPU diformat berbeda). Berikut adalah versi yang bekerja dengan kedua implementasi:top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'
top -l 2 -n 0 -F | egrep -o ' \d*\.\d+% idle' | tail -1 | awk -F% -v prefix="$prefix" '{ printf "%s%.1f%%\n", prefix, 100 - $1 }'
.Coba
mpstat
darisysstat
paketKemudian beberapa
cut
ataugrep
untuk menguraikan informasi yang Anda butuhkan:sumber
awk
bagian menjadiawk -F " " '{print (100 - $12)"%"}'
:, yang memberikan output diformat seperti yang dia inginkan, tetapi jika tidak, ini terlihat baik bagi saya.mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }'
Mungkin juga memunculkan respons yang sebenarnya dengan solusi saya, yang terinspirasi oleh Peter Liljenberg:
Ini akan digunakan
awk
untuk mencetak 100 minus bidang ke-12 (idle), dengan tanda persentase setelahnya.awk
hanya akan melakukan ini untuk garis di mana bidang ke-12 hanya memiliki angka dan titik ($12 ~ /[0-9]+/
).Anda juga dapat rata-rata lima sampel, satu detik terpisah:
Uji seperti ini:
sumber
conky
ditampilkan juga. Sayangnya, baris ini SANGAT lambat, hampir membutuhkan satu detik untuk dieksekusi.DIedit: Saya perhatikan bahwa di pengguna lain, balasan% idle adalah isian 12 bukan isian 11. Awk telah diperbarui agar akun% isian isian menjadi variabel.
Ini akan memberi Anda output yang diinginkan:
Jika Anda ingin pembulatan bilangan bulat sederhana, Anda dapat menggunakan printf:
sumber
mpstat 1 1 | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d",100 - $field) }'
bekerja bagus untukku, terima kasih. catat mpstat 1 1 untuk memastikan bahwa penggunaan cpu disampel lebih dari sedetikmpstat -o JSON -u 1 1 | jq '.sysstat.hosts[0].statistics[0]["cpu-load"][0].idle'