Bagaimana saya bisa memonitor jumlah utas proses di linux?


135

Saya ingin memantau jumlah utas yang digunakan oleh proses tertentu di Linux. Apakah ada cara mudah untuk mendapatkan informasi ini tanpa memengaruhi kinerja proses?


Bagaimana jika proses aplikasi hanya berjalan untuk waktu yang singkat? (Katakan 2 detik.)
user2023370

Jawaban:


152

mencoba

ps huH p <PID_OF_U_PROCESS> | wc -l

atau htop


3
Saya percaya Anda harus mengurangi 1karena mencetak garis seperti USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDuntuk header tabel.
AhmetB - Google

2
Tanda 'h' menyembunyikan tajuk.
Thinkmassive

11
-1 Mengapa pipa output wcketika Anda bisa saja ps -o thcount <pid>? Lihat jawaban ini .
Aliran

73

Untuk mendapatkan jumlah utas untuk pid yang diberikan:

$ ps -o nlwp <pid>

Di mana nlwpsingkatan Jumlah Proses Ringan (utas) . Dengan demikian psalias nlwpuntuk thcount, yang berarti bahwa

$ ps -o thcount <pid>

tidak bekerja.

Jika Anda ingin memantau jumlah utas, cukup gunakan watch:

$ watch ps -o thcount <pid>

Untuk mendapatkan jumlah semua utas yang berjalan di sistem:

$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

2
Jawaban paling berguna di sini. Terutama watchperintahnya. Namun, perhatikan bahwa menggunakan thcountdapat gagal untuk beberapa (Red Hat ...), meskipun nlwpbekerja untuk saya.
Joshua Detwiler

50

Setiap utas dalam suatu proses membuat direktori di bawah /proc/<pid>/task. Hitung jumlah direktori, dan Anda memiliki jumlah utas.


1
Untuk menambahkan komentar di atas. Anda dapat menggunakan perintah ini untuk menemukan jumlah thread: find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l. Cukup ganti <PID> dengan ID proses yang dapat Anda peroleh topatau gunakanps
Navigatron


21

ps -eLfpada shell akan memberi Anda daftar semua utas dan proses yang saat ini berjalan pada sistem. Atau, Anda dapat menjalankan topperintah lalu tekan 'H' untuk beralih daftar utas.


Ini saus untukku. Saya tidak ingin membatasi hanya pada satu proses. Sangat mudah untuk menambahkan -pini jika perlu, atau apa pun. Ini adalah minimum yang Anda butuhkan untuk melihat daftar utas.
Erick Robertson

6

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.


6

Jika Anda menggunakan:

ps uH p <PID_OF_U_PROCESS> | wc -l

Anda harus mengurangi 1 pada hasilnya, karena salah satu baris "wc" sedang menghitung adalah header dari perintah "ps".


Selamat datang di StackOverflow. Bisa dibilang, ini harus menjadi komentar untuk jawaban oleh slav0nic. Namun, seperti yang saya pahami, ketika Anda pertama kali bergabung dengan SO, Anda (masih) tidak dapat mengomentari jawaban sampai Anda mendapatkan reputasi, sehingga menambahkan jawaban adalah tentang semua yang dapat Anda lakukan. Anda benar; Anda seharusnya tidak menghitung baris header dari pssebagai salah satu utas.
Jonathan Leffler

6

Berikut adalah satu perintah yang menampilkan jumlah utas proses yang diberikan:

ps -L -o pid= -p <pid> | wc -l

Tidak seperti psjawaban berbasis lainnya , di sini tidak perlu mengurangi 1dari outputnya karena tidak ada psbaris header berkat -o pid=opsi.


5

$ 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)

root@abc:~# cat /proc/8443/status
Name:   abcdd
State:  S (sleeping)
Tgid:   8443
VmSwap:        0 kB
Threads:    4
SigQ:   0/256556
SigPnd: 0000000000000000

4

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.



2

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:

sudo apt-get install htop

Menginstal di Redhat atau CentOS:

yum install htop
dnf install htop      [On Fedora 22+ releases]

Jika Anda ingin mengompilasi "htop" dari kode sumber, Anda akan menemukannya di sini .


1

Jika Anda mencoba mencari tahu jumlah utas menggunakan cpu untuk pid yang diberikan, saya akan menggunakan:

top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l

0

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 jstackkemudian memfilter semua utas yang menurut heuristik tampaknya idle, menunjukkan kepada Anda tumpukan jejak untuk utas tersebut yang sebenarnya menghabiskan siklus CPU.



0

Jika Anda ingin jumlah utas per pengguna dalam sistem linux maka Anda harus menggunakan:

ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'

dimana gunakan nama pengguna yang diinginkan.

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.