Bagaimana cara mencatat penggunaan CPU per proses?

18

Saya memiliki kotak di Linode yang mengalami perilaku aneh. Sesekali CPU dan disk I / O akan menembak ke 100% dan server menjadi tidak responsif dan harus di-boot. Saya ingin menyelidiki lebih baik apa yang terjadi, tetapi saya tidak tahu bagaimana menemukan siapa yang bertanggung jawab atas semua CPU dan I / O itu. Saya menjalankan Gentoo 2.6.18.

Helder S Ribeiro
sumber

Jawaban:

20

Anda dapat mencoba melakukan sesuatu seperti ini:

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done

itu akan menunjukkan sepuluh proses dalam hal penggunaan CPU. Anda dapat mengubah jumlah proses yang ditunjukkan dengan mengubah 10 di "head -10" ke nomor yang berbeda, dan seberapa sering pembaruan dengan mengubah 3 di "sleep 3" atau mengeluarkan bagian "sleep 3" seluruhnya.

shawn
sumber
5
Pastikan Anda memiliki semacam tidur di sana, jika tidak ada kesempatan baik bahwa proses shell Anda akan selalu di atas 10. :)
jedberg
Saya pikir sort -nrakan lebih baik untuk mengurutkan secara numerik (setidaknya di ubuntu / debian
boxen
2
BTW, Anda harus memberikan proses ini prioritas tertinggi, agar tetap bermanfaat selama puncak beban tinggi (yang merupakan titik hidupnya, setelah semua).
spacediver
12

Lihat di atasnya akan menulis log biner dari hampir semua yang Anda inginkan dan kemudian Anda dapat menggunakan top seperti gui untuk pergi melalui irisan waktu hari (default adalah mengambil data setiap 5 menit). http://www.atcomputing.nl/Tools/atop/

ScottZ
sumber
6

Saya pikir munin adalah salah satu alat pemantauan barang yang akan membantu Anda mendapatkan beberapa informasi tentang aktivitas kotak Anda. Juga, ada beberapa alat baris perintah seperti sar , iostat, ps, top untuk penggunaan tersebut.

Ali Mezgani
sumber
5

Jawaban lain hanya menunjukkan kepada Anda bagaimana Anda dapat melihat apa yang sedang terjadi, yang tidak membantu jika sistem telah di-boot ulang.

Jika Anda ingin informasi ini dicatat untuk anak cucu (atau tagihan, atau apa pun penggunaan lain yang mungkin Anda miliki), yang Anda inginkan adalah proses akuntansi.

Inilah HOWTO yang saya temukan, tetapi saya akan jujur ​​- sudah satu dekade sejak saya menggunakan proses akuntansi.

http://tldp.org/HOWTO/Process-Accounting/

Rob F
sumber
2

Pendekatan yang lebih ramah pengguna terhadap solusi shawn untuk pemantauan waktu nyata:

while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done

Ini akan memberikan tampilan statis dari 20 proses teratas yang akan di-refresh setiap 1 detik. Opsi "c" dalam perintah ps akan mencetak nama proses yang dapat dieksekusi daripada seluruh perintah args. Anda dapat menghilangkan opsi ini jika Anda membutuhkan seluruh info perintah sebagai gantinya. % kolom penggunaan memori juga ditambahkan.

manolis
sumber
1

Bukankah Gentoo memiliki perintah "atas"?

machine:~/# top

seharusnya memberi Anda statistik menjalankan program mana yang paling banyak memuat.

Luar biasa
sumber
Ya saya tahu, tetapi saya ingin agar catatan itu dicatat sehingga saya dapat melihat sejarahnya nanti. Ketika CPU melonjak, mesin menjadi tidak responsif, jadi saya tidak bisa masuk dan lari topuntuk melihat siapa pelakunya. Saya ingin memeriksa kembali nanti dan melihat proses mana yang melakukannya.
Helder S Ribeiro