Tampilkan lima proses konsumsi CPU teratas dengan `ps`


102

Bagaimana cara menunjukkan lima proses memakan CPU dengan ps?

Jawaban:


95

Mengapa menggunakan psketika Anda bisa melakukannya dengan mudah dengan topperintah?

Jika Anda harus menggunakan ps, coba ini:

ps aux | sort -nrk 3,3 | head -n 5

Jika Anda menginginkan sesuatu yang benar-benar 'top'esq dengan pembaruan konstan, gunakan arloji

watch "ps aux | sort -nrk 3,3 | head -n 5"

3
ps aux | sort -k 3,3 | tail -n 5 ;-)
PlanasB

1
akan lebih baik untuk memasukkan jenis numerik, untuk melewatkan header dari ps aux. ps aux | sort -nrk 3,3 | head -n 5
syss

1
ini memunculkan banyak proses yang lebih memakan sumber daya dan juga lebih rentan terhadap kondisi ras, karena ketika data yang disalurkan datang ke kepala, daftar proses mungkin sudah berubah
phuclv

Ini benar @ LưuVĩnhPhúc tapi saya ingin tahu bagaimana ini berbeda dari bagaimana topsebenarnya bekerja.
icedwater

1
@icedwater topmembaca daftar proses dan menampilkan hasilnya sendiri tanpa menyalurkan ke proses lain
phuclv

87

Jawaban yang benar adalah :

ps --sort=-pcpu | head -n 6

Jadi, Anda dapat menentukan kolom tanpa mengganggu penyortiran.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Catatan untuk MAC OS X : Di Mac OS X, pstidak dikenali --sort, tetapi menawarkan -runtuk mengurutkan berdasarkan penggunaan CPU saat ini. Jadi, untuk Mac OS X Anda dapat menggunakan:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6

3
Ini jawaban yang benar. Terima kasih Facundo. Saya mencoba menjelaskan kepada orang lain bahwa Anda dapat menggunakan sort dan pipe, tetapi ps juga dilengkapi dengan opsi untuk menyortir dan sekarang saya melihat Anda juga menggunakannya yang bagus.
Luis Alvarado

Perintah ke-2 tampak lebih bermanfaat ... tetapi yang pertama sepertinya menunjukkan bash(x2, atau headjuga) ps...
Wilf

3
@ Willf Yang pertama adalah untuk menyoroti cara mengurutkan berdasarkan konsumsi CPU tanpa menggunakan perintah sort, yang kedua menunjukkan bagaimana menentukan kolom tanpa mengganggu penyortiran. Ketika menjelaskan sesuatu .. itu selalu lebih baik untuk ringkas dan menjelaskan satu per satu.
Facundo Victor

28

Tergantung pada kebutuhan Anda, Anda mungkin menemukan ini sedikit lebih mudah dibaca:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

output sampel:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(isiannya adalah% CPU, PID, USER, COMMAND)


22

Saya tidak berpikir psapa yang Anda cari. Sudahkah Anda melihat output dari top?

Jika Anda memiliki GNU-Top, coba gunakan mode batch untuk memuntahkan daftar proses yang diurutkan berdasarkan penggunaan CPU dan menggunakan head / tail untuk mendapatkan 5 baris teratas (8 yang pertama adalah header):

top -b -n 1 | head -n 12  | tail -n 5

BSD top tampaknya berperilaku berbeda dan tidak memiliki mode non-interaktif, jadi gunakan salah satu pssolusi berbasis lainnya .


1
Di OS X, adalah top -o cpu -n 5cara mencapai hal yang sama. Apakah ada yang tahu? Saya topberbeda dengan Anda top.
boehj

Kaulah dengan top berbeda sehingga Anda akan berada dalam posisi untuk mengatakan. Atasan saya tidak memiliki -odan -nmenetapkan berapa kali menyegarkan tampilan sebelum berhenti.
Caleb

Cukup adil. Saya akan menggunakan kotak Linux sore ini dan memeriksanya. topTampaknya saya tidak memiliki mode batch, yang cukup membatasi. Harus ada beberapa cara pemipaan topke perintah lain. Saya akan melakukan riset.
boehj

Saya menyebutkan beralih mode batch dalam jawaban saya tetapi sebenarnya tidak perlu untuk top saya karena mendeteksi otomatis menjadi bagian dari pipa bukannya sesi interaktif. Apakah Anda mencoba hanya menyalurkannya tanpa itu?
Caleb

1
Akan melakukan. GNU topbekerja seperti yang dijelaskan sore ini. Tepuk tangan.
boehj

6

Satu liner tercepat yang saya temukan untuk ini (catatan 6 karena header menambahkan):

ps aux k-pcpu | head -6

5

Perhatikan bahwa versi ps saat ini memiliki kemampuan pengurutan di dalamnya, berdasarkan kode bidang (diberikan pada halaman manual ps). Kode bidang untuk penggunaan prosesor adalah "c". Anda dapat menggunakan --sort cdi akhir perintah ps misalnyaps aux --sort c

Ini akan menempatkan proses menggunakan cpu terbanyak di bagian bawah daftar. Membalik urutan daftar dengan menambahkan minus ke kode bidang yang digunakan untuk menyortir misalnyaps aux --sort -c


4

Untuk menambahkan poin ke jawaban berharga lainnya, saya lebih suka:

ps auxk-c | head -6

Ini juga mencetak header, yang bagus.

Berikut kini identik dengan --sortdan cmenentukan bidang penggunaan CPU (alias %cpu) untuk pengurutan, sedangkan -untuk pengurutan terbalik.

Anda dapat menambahkan lebih penentu dipisahkan oleh ,, specifier lain yang mungkin adalah: %mem, args, bsdstart, pid, gid, uid... yang dapat Anda temukan daftar lengkap di STANDAR specifier FORMAT bagian dari halaman manual. Sebagai contoh:

 ps auxk -gid,-%mem | head -11

akan mencetak 10 proses dengan id grup tertinggi, diurutkan secara internal berdasarkan penggunaan memori.


3

Alat baris perintah psmemiliki opsi pengurutannya sendiri, jadi saya lebih suka:

$ ps -eo pcpu,args --sort=-%cpu | head

Anda dapat menambahkan kolom yang Anda inginkan. Lihat opsi apa yang tersedia melalui pshalaman manual.

$ man ps

0

toppada Mac OS X memiliki opsi mode logging dalam bentuk top -l numberOfSamples(yang tampaknya setara dengan mode batch GNU top). Namun, perlu untuk memiliki setidaknya dua sampel karena "sampel pertama yang ditampilkan akan menampilkan% CPU yang tidak valid untuk setiap proses, karena dihitung menggunakan delta antar sampel" ( man 1 top).

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6

0

topakan menampilkan apa yang menggunakan CPU Anda. Jika Anda telah menginstalnya, htopmemungkinkan Anda untuk mengontrol dengan lebih baik, termasuk pemfilteran menurut — dalam kasus Anda — CPU.


0

Saya percaya cara paling sederhana untuk melihat 5 proses konsumsi cpu adalah,

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

Untuk melihat 5 proses memakan memori teratas adalah,

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

Dimana,

-e : Bendera ini digunakan untuk memilih semua proses

-o : Bendera ini digunakan untuk memformat sebagai yang ditentukan pengguna.

pid : Argumen ini digunakan untuk menampilkan pid

comm: Argumen ini digunakan untuk menunjukkan nama perintah saja. Untuk mendapatkan perintah penuh args, gunakan , cmdataucommand

%cpu: Argumen ini menunjukkan persentase pemanfaatan CPU dari proses dalam format "##. #". Di sini pcpujuga bisa digunakan.

%mem: Argumen ini menunjukkan rasio ukuran set penduduk proses dengan memori fisik pada mesin, dinyatakan sebagai persentase. Di sini pmemjuga bisa digunakan.

--sort: Tentukan urutan penyortiran. Setelah =itu -tanda digunakan untuk mengurutkan nilai tertinggi di atas di mana pilihan default yang +adalah daftar urutan yang meningkat numerik [yaitu 0 n].


-2

top -bn1 |sed -n '7,12'pberfungsi sebagai liner kecil yang bagus juga.
Meskipun saya lebih suka menggunakan ps dengan --sort = X -o X, Y, Z

menggunakan ps Anda dapat menarik berbagai statistik grep untuk proses ATAU pengguna dan lalu ATAU rata-rata mereka dengan pipa untuk awk.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.