Tampilkan lima proses konsumsi CPU teratas dengan `ps`

102

Bagaimana cara menunjukkan lima proses memakan CPU dengan ps?

PlanasB
sumber

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"
Boban P.
sumber
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
Facundo Victor
sumber
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)

Ryan Horrisberger
sumber
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 .

Caleb
sumber
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
Nestor Urquiza
sumber
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

Cian D
sumber
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.

2i3r
sumber
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
Christopher James Morton
sumber
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
ulf
sumber
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.

PSN
sumber
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].

muhammad
sumber
-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.

jshedler
sumber