Saya ingin memantau jumlah utas yang digunakan oleh proses tertentu di Linux. Apakah ada cara mudah untuk mendapatkan informasi ini tanpa memengaruhi kinerja proses?
linux
multithreading
monitor
Mengalir
sumber
sumber
Jawaban:
mencoba
atau htop
sumber
1
karena mencetak garis sepertiUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
untuk header tabel.wc
ketika Anda bisa sajaps -o thcount <pid>
? Lihat jawaban ini .Untuk mendapatkan jumlah utas untuk pid yang diberikan:
Di mana
nlwp
singkatan Jumlah Proses Ringan (utas) . Dengan demikianps
aliasnlwp
untukthcount
, yang berarti bahwatidak bekerja.
Jika Anda ingin memantau jumlah utas, cukup gunakan
watch
:Untuk mendapatkan jumlah semua utas yang berjalan di sistem:
sumber
watch
perintahnya. Namun, perhatikan bahwa menggunakanthcount
dapat gagal untuk beberapa (Red Hat ...), meskipunnlwp
bekerja untuk saya.Setiap utas dalam suatu proses membuat direktori di bawah
/proc/<pid>/task
. Hitung jumlah direktori, dan Anda memiliki jumlah utas.sumber
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Cukup ganti <PID> dengan ID proses yang dapat Anda perolehtop
atau gunakanps
sumber
ps -eLf
pada shell akan memberi Anda daftar semua utas dan proses yang saat ini berjalan pada sistem. Atau, Anda dapat menjalankantop
perintah lalu tekan 'H' untuk beralih daftar utas.sumber
-p
ini jika perlu, atau apa pun. Ini adalah minimum yang Anda butuhkan untuk melihat daftar utas.JStack cukup murah - salah satu opsi adalah menyalurkan output melalui grep untuk menemukan utas aktif dan kemudian menyalurkan melalui wc -l.
Lebih grafis adalah JConsole, yang menampilkan jumlah utas untuk proses yang diberikan.
sumber
Jika Anda menggunakan:
Anda harus mengurangi 1 pada hasilnya, karena salah satu baris "wc" sedang menghitung adalah header dari perintah "ps".
sumber
ps
sebagai salah satu utas.Berikut adalah satu perintah yang menampilkan jumlah utas proses yang diberikan:
Tidak seperti
ps
jawaban berbasis lainnya , di sini tidak perlu mengurangi1
dari outputnya karena tidak adaps
baris header berkat-o pid=
opsi.sumber
$ ps H p pid-id
H - Daftar semua utas secara individu dalam suatu proses
atau
$cat /proc/pid-id/status
pid-id adalah ID Proses
mis .. (Terpotong output di bawah ini)
sumber
Distribusi JDK yang lebih baru dikirimkan bersama JConsole dan VisualVM. Keduanya adalah alat yang fantastis untuk mendapatkan detail kotor dari proses Java yang sedang berjalan. Jika Anda harus melakukan ini secara terprogram, selidiki JMX.
sumber
jvmtop dapat menampilkan jumlah utas jvm saat ini di samping metrik lainnya.
sumber
Cara termudah adalah menggunakan "htop". Anda dapat menginstal "htop" (versi teratas yang lebih bagus) yang akan menunjukkan semua inti, proses, dan penggunaan memori Anda.
Tekan "Shift + H" untuk menampilkan semua proses atau tekan lagi untuk menyembunyikannya. Tekan tombol "F4" untuk mencari nama proses Anda.
Menginstal di Ubuntu atau Debian:
Menginstal di Redhat atau CentOS:
Jika Anda ingin mengompilasi "htop" dari kode sumber, Anda akan menemukannya di sini .
sumber
Jika Anda mencoba mencari tahu jumlah utas menggunakan cpu untuk pid yang diberikan, saya akan menggunakan:
sumber
Jika Anda tertarik pada utas yang benar-benar aktif - seperti dalam melakukan sesuatu (tidak diblokir, tidak timed_waiting, tidak melaporkan "utas berjalan" tetapi benar-benar menunggu aliran untuk memberikan data) sebagai lawan dari duduk diam tetapi hidup - - maka Anda mungkin tertarik pada jstack-aktif .
Skrip bash sederhana ini berjalan
jstack
kemudian memfilter semua utas yang menurut heuristik tampaknya idle, menunjukkan kepada Anda tumpukan jejak untuk utas tersebut yang sebenarnya menghabiskan siklus CPU.sumber
VisualVM dapat menunjukkan status yang jelas dari utas proses JVM yang diberikan
sumber
Jika Anda ingin jumlah utas per pengguna dalam sistem linux maka Anda harus menggunakan:
dimana gunakan nama pengguna yang diinginkan.
sumber