Bagaimana menemukan proses yang memonopoli mesin


10

Skenario: Tiba-tiba, komputer saya terasa lemas. Mouse bergerak tetapi jendela butuh waktu lama untuk dibuka, dll. uptimeMengatakan bebannya 7,69 dan naik .

Apa cara tercepat untuk mengetahui proses mana yang menjadi penyebab beban?

Sekarang, "top" dan alat-alat serupa bukanlah jawabannya karena mereka menunjukkan penggunaan CPU atau memori tetapi tidak keduanya sekaligus. Yang saya butuhkan adalah perintah tunggal yang saya bisa ketik saat itu terjadi - sesuatu yang akan mencari tahu

Sistem mencoba menukar 8GB RAM ke disk karena proses X ...

atau

proses X mencari seluruh disk

atau

proses X menggunakan CPU 400% "

Jadi yang saya cari adalah iostat, htop / di atas dan alat-alat serupa bertemu menjadi satu dengan output seperti ini:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Saya tidak ingin alat yang memberi saya beberapa angka yang dapat saya analisis tetapi alat yang memberi tahu saya persis proses mana yang menyebabkan beban saat ini. Asumsikan bahwa pengguna di depan keyboard hampir tidak tahu bagaimana menulis "proses", tetapi pengguna dengan cepat kewalahan ketika datang ke "ukuran penduduk", "memori virtual" atau "proses siklus hidup".

Argumen saya seperti ini: Seorang pengguna memperhatikan masalah. Mungkin ada ribuan alasan ... well, hampir :-) Pengguna ingin tahu sumber masalahnya.

Solusi saat ini memberi saya banyak angka, dan saya perlu tahu apa arti angka-angka ini. Apa yang saya cari adalah alat meta. 99% dari data tidak relevan dengan masalah. Jadi apa yang harus dilakukan alat ini adalah mencari proses yang menyimpan beberapa sumber daya dan hanya daftar yang disertai dengan "proses ini membutuhkan banyak CPU, ini menghasilkan banyak IRQ, proses ini mengalokasikan banyak RAM (dan masih terus berkembang)".

Ini akan menjadi daftar yang relatif singkat. Akan jauh lebih sederhana bagi seseorang yang baru dalam hal ini untuk menemukan pelakunya dari daftar ini daripada dari output, katakanlah, htopyang memberi saya sekitar 5.000 angka tetapi mengharuskan saya untuk melipat proses multi-thread sendiri (saya memiliki 50 baris yang mengatakan VIRT 2750Mtetapi hanya 16 GB RAM - mesin harus menukar dirinya sendiri sampai mati tetapi tentu saja, ini adalah salah tafsir dari data yang dapat terjadi dengan cepat).


Saya tidak mengerti mengapa. Gejala yang Anda jelaskan bukan dari sampah disk (tidak akan memengaruhi mouse). Mouse lamban adalah CPU klasik dengan kapasitas penuh.
soandos

1
Ini hanya sebuah contoh. Silakan bawa dengan sebutir garam. Bayangkan seorang noob sedang duduk di depan komputer yang tidak tahu apa-apa. Bagaimana dia bisa mengetahui dengan mudah apa yang sedang terjadi (yaitu tanpa menghabiskan setengah jam mencari apa topartinya)
Aaron Digulla

Apakah Anda mencari manajer Linux yang setara dengan gui dan segalanya, atau yang lainnya?
soandos

Saya mencari sesuatu yang saya jalankan dan yang mengatakan "Proses X memonopoli mesin".
Aaron Digulla

Jawaban:


3

Saya benar-benar harus tersenyum pada respons karena masing-masing menyuruh Anda menjalankan alat X. Satu-satunya masalah adalah jika apa yang Anda lihat berselang tidak akan ada cara untuk menghubungkan sesuatu. Alat seperti sar dapat membantu jika Anda menjalankannya pada frekuensi yang cukup tinggi, tetapi saya akan mengklaim colll lebih baik.

Seperti sar , Anda menjalankannya sebagai daemon dengan menginstal RPM dan melakukan /etc/init.d/collectl start.

Sekarang ketika Anda melihat sesuatu yang lamban, collectl -p /var/log/collectl/filename --topakan memutar data dan menunjukkan kepada Anda proses teratas. Anda juga bisa berlari collectl --topdan melihatnya secara langsung. BTW - apa pun yang dapat Anda lakukan secara real time Anda juga dapat memutar.

Adapun beban CPU, bagaimana jika Anda mendapatkan kelebihan dengan interupsi? collectl -sCtidak hanya akan menampilkan beban pada masing-masing CPU (atau digunakan -scuntuk beban rata-rata), itu juga akan menunjukkan bagaimana mereka menghabiskan waktu mereka. Sertakan -j( -scj) dan Anda akan melihat jumlah interupsi / CPU. Gunakan huruf besar -Jdan Anda akan melihat JENIS setiap interupsi / CPU.

Tentu saja, jika Anda benar-benar menyukai vmstat, Anda selalu dapat memutar ulang data yang dikumpulkan dengan --vmstatdan itu akan menampilkan data historis dalam format vmstat.

Ada jauh lebih banyak switch daripada yang saya punya waktu untuk daftar, tetapi Anda dapat memeriksanya di SourceForge atau hanya google saja.


Terima kasih; ini bukan apa yang saya cari tetapi setidaknya itu adalah titik awal yang baik.
Aaron Digulla

Alat yang luar biasa! Dan di Ubuntu (setidaknya sejak 12,04) Anda hanya perlu menginstal paket - ia memulai daemon secara otomatis saat menginstal dan pada reboot setelahnya :)
nealmcb

6

"top" bekerja cukup baik, selama Anda melihat angka yang tepat. Ayo lihat:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Sekarang, jika sistemnya lambat karena semua CPU diambil, itu akan ditampilkan sebagai kolom "us" dan "sy" pada "Cpu (s):" baris yang mendekati 100% secara bersamaan.

Jika lambat karena bertukar, "Mem:" "gratis" menunjukkan nilai yang sangat rendah dan "Tukar:" "menggunakan" nilai tinggi.

Jika lambat karena I / O secara umum, maka "Cpu (s):" "wa" mengatakan bahwa waktu dihabiskan untuk menunggu I / O.

Sekarang, jika Anda tahu I / O menunggu adalah masalahnya, Anda dapat menggunakan program "iotop" untuk mengetahui proses mana yang paling banyak membuat I / O.


+1 Tapi saya lebih mencari alat yang melakukan analisis ini untuk saya dan mencetak proses bersama dengan beberapa info apa yang salah. Saya tidak ingin mengumpulkan itu dari angka "mentah". Apa pun?
Aaron Digulla

1
Maaf, tetapi Anda tidak dapat menyelesaikan masalah seperti kelambatan mesin tanpa memahami pada tingkat dasar perbedaan antara berbagai jenis kelambatan. Jika alat seperti itu ada, saya tidak tahu tentang mereka; kemungkinan besar Anda membutuhkan administrator komputer / petugas servis yang mampu.
Zds

Akan lebih baik jika alat seperti itu ada karena tentu saja mungkin untuk menentukan ini secara otomatis: Jika saya dapat mengetahui dari outputnya top, begitu juga komputer. Ini bukan Mona Lisa's Smile, itu hanya mencari-cari angka yang "buruk".
Aaron Digulla

2

Berdasarkan penggunaan 400%, saya akan berasumsi bahwa Anda memiliki prosesor quad-core. Rata-rata beban Anda hampir dua kali lipat kapasitas dan setengah dari proses menunggu untuk CPU.

Pertama, reniceshell Anda ke 0 atau -10 untuk mendapatkan sistem yang lebih responsif, dan kemudian gunakan htopuntuk menemukan proses yang menyinggung dan ikuti dengan straceproses yang diberikan. Alat lain yang bisa bermanfaat adalah:

  • vmsat
  • sar
  • iostat
  • pmap

1

Mouse yang lamban juga bisa disebabkan oleh beban interupsi yang terlalu tinggi, atau, pengontrol USB menjadi sangat sibuk (saya menganggap itu adalah mouse USB).


Adakah alat yang memberi tahu saya driver / komponen mana yang menyebabkan beban IRQ tinggi?
Aaron Digulla

1

vmstat dapat membantu Anda secara umum. Contoh penggunaannya adalah:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Anda dapat menjalankannya setiap X detik juga - cukup tambahkan angka X setelah perintah.

Sunting: Mengingat komentar ... Tuliskan yang berikut ke file dan buat file itu dapat dieksekusi. Ini akan memberi tahu Anda 3 proses teratas pada mesin.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Jika Anda ingin tahu memori mana yang macet dan bukan CPU, maka baca halaman manual teratas dan ubah urutan tampilan.


Saya mencari sesuatu yang lebih tinggi. Itu harus menjalankan vmstat dan menganalisis angka untuk saya, jadi saya tidak perlu tahu apa artinya "cs" dan apakah "cs" besar adalah "baik" atau "buruk".
Aaron Digulla
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.