Bagaimana saya bisa mengetahui apakah suatu proses adalah CPU, Memori atau Disk-terikat?

42

Bagaimana saya bisa mengetahui apakah suatu proses terikat ke CPU, Memori atau Disk?

ssanj
sumber
Jika Anda menggunakan GUI gnome, Anda dapat menambahkan applet Monitor Sistem ke panel Anda. Dalam pengaturan Anda dapat mengatur siklus yang hilang ke IO-Tunggu untuk muncul sebagai putih, dan mengatur grafik Memori, CPU dan Disk Baca / Tulis untuk ditampilkan. Saya biasanya mengubah warna grafik default untuk membuatnya lebih mudah untuk membedakan memori pengguna / OS dan disk baca / tulis. Ini bukan solusi nyata, tetapi berguna untuk memiliki bersama semua alat yang disebutkan dalam jawaban.
Jeremy
1
@ luis-alvarado Saya tidak setuju bahwa pertanyaan ini tidak berguna, meskipun saya berpendapat ini mungkin lebih cocok di StackOverflow atau sejenisnya. Saya datang ke sini mencari solusi.
skeggse
Masalah dengan pertanyaan yang ditanyakan adalah tidak mempertimbangkan lingkungan eksekusi. Metode mana yang paling efektif dalam menemukan bottleneck komponen host dari suatu pekerjaan / proses terkait erat dengan runtime, lingkungan eksekusi, OS host, perangkat keras, dll dari pekerjaan dan tooling apa yang tersedia untuk setiap komponen untuk memeriksanya. Beberapa runtime (runtime Erlang atau JVM IBM, misalnya) memiliki alat yang mendalam untuk ini daripada rentang seluruh lingkungan, yang lain sama sekali tidak memiliki tooling dan membuat Anda membuat tebakan yang dididik berdasarkan apa pun htop / iotop / dll. dapat menunjukkan kepada Anda.
zxq9
Terkait: stackoverflow.com/questions/3156334/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

19

Itu membutuhkan beberapa voodoo. Tergantung. Contoh:

  • Jika ada cukup memori dan disk sepertinya tidak terlalu sibuk, itu mungkin terikat CPU. Lihatlah penggunaan CPU dan jika berbatasan dengan 100% CPU terikat. Jika tidak ada hambatan buatan dalam implementasi. Misalnya pada CPU dual-core proses threaded tunggal tidak akan lebih dari 50% penggunaan CPU.

  • Jika CPU dan memori tersedia, tetapi disk sangat sibuk, atau IO latency tampaknya tinggi, kemungkinan IO-nya terikat. Lihat apakah menambahkan lebih banyak disk (RAID?) Membantu.

  • Bukan dari salah satu di atas? Periksa memori yang tersedia.

  • Memori yang cukup? Mungkin ada hambatan buatan dalam proses itu sendiri yaitu mungkin seseorang lupa menghapus tidur (1)? Naah biasanya tidak semudah itu. ;)

Ada alasan mengapa kami memiliki laboratorium lengkap untuk insinyur kinerja di sebagian besar perusahaan yang berurusan dengan produk yang peka terhadap kinerja!

Gunakan alat-alat seperti sar, vmstat, iostat, oprofile, lockstat, dtrace, alat pemantauan perf khusus produk dll, untuk men-debug masalah perf.

Sudhanshu
sumber
2
Apakah ada alat yang mengikat semua ini?
ssanj
biasanya tidak, tetapi jika dtrace tersedia di sistem Anda (Solaris / FreeBSD / Mac OS X?), Anda mungkin bisa jauh hanya dengan menggunakan itu.
Sudhanshu
Saya baru ingat ada Systemtap di linux (mirip dengan dtrace), kecuali saya tidak yakin tentang kematangan alat.
Sudhanshu
vmstat bermanfaat.
James
12

check out iotop, bisa bermanfaat

ithkuil
sumber
iotop tidak diinstal secara default di redhat
Mona Jalal
9

Alat yang dapat berguna untuk pengecekan waktu-nyata sejumlah statistik proses (memori, penggunaan CPU, I / O, dll.) Adalah htop . Itu tidak menggantikan alat yang lebih khusus yang dinamai oleh Sudhanshu, tetapi mungkin merupakan awal yang baik.

JanC
sumber
4

Selain alat-alat lain yang disebutkan, jalankan ps l PID, masukkan id proses yang relevan, atau lihat kolom STATE dan WCHAN di bagian atas atau htop.

Jika dalam keadaan D (untuk disk), maka ia melakukan file IO. Ini bisa karena itu baik membaca banyak file, atau karena itu menggunakan banyak memori dan bertukar. Kolom WCHAN akan memberi tahu Anda apa fungsi kernel di dalamnya; googling untuk mereka atau bertanya di sini dapat memberi Anda beberapa indikasi apa artinya.

Jika dalam kondisi R (run), ia menggunakan CPU di ruang pengguna, dengan kata lain CPU terikat pada saat itu.

Jika dalam kondisi S (sleep), itu ada di dalam system call yang interruptible, yang bisa berarti itu benar-benar tidur, atau sedang melakukan sesuatu seperti menunggu lalu lintas jaringan atau kunci. Sekali lagi, melihat wchan spesifik akan memberi tahu Anda lebih banyak.

Lihat juga Apa "Saluran Tunggu" dari suatu proses?

Poolie
sumber
2

Jalankan topdan lihat baris penggunaan cpu. % Pengguna tinggi menunjukkan bahwa ia terikat cpu. % Tunggu tinggi menunjukkan bahwa itu terikat IO.

psusi
sumber