Linux'ta bir işlemin iş parçacığı sayısını nasıl izleyebilirim?


135

Linux'ta belirli bir işlem tarafından kullanılan iş parçacığı sayısını izlemek istiyorum. Sürecin performansını etkilemeden bu bilgileri almanın kolay bir yolu var mı?


Bir uygulamanın süreci yalnızca kısa bir süre çalışıyorsa nasıl olur? (2 saniye söyleyin.)
user2023370

Yanıtlar:


153

Deneyin

ps huH p <PID_OF_U_PROCESS> | wc -l

veya htop


3
Bundan çıkarmanız gerektiğine inanıyorum 1çünkü USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDtablo başlığı gibi bir satır yazdırıyor .
AhmetB - Google

2
'H' başlığı gizler.
thinkmassive

11
-1 Neden wcsadece yapabildiğiniz zaman çıktıyı yönlendirelim ps -o thcount <pid>? Bu cevaba bakın .
Flow

74

Belirli bir pid için iş parçacığı sayısını almak için:

$ ps -o nlwp <pid>

Nerede nlwpiçin standları Işık Ağırlık Sayısı (konuları) Süreçleri . Bu nedenle pstakma nlwpiçin thcountolan araçlarının,

$ ps -o thcount <pid>

aynı zamanda çalışıyor.

İplik sayısını izlemek istiyorsanız, şunu kullanın watch:

$ watch ps -o thcount <pid>

Sistemde çalışan tüm iş parçacıklarının toplamını almak için:

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

2
En yararlı cevap burada. Özellikle watchkomut. Ancak, benim için işe yarasa da, kullanmanın thcountbazıları için başarısız olabileceğini unutmayın (Red Hat ...) nlwp.
Joshua Detwiler

50

Bir süreçteki her iş parçacığı altında bir dizin oluşturur /proc/<pid>/task. Dizinlerin sayısını sayın ve iş parçacığı sayısına sahipsiniz.


1
Yukarıdaki yoruma eklemek için. Sen parçacığı sayısını bulmak için bu komutu kullanabilirsiniz: find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l. <PID> 'yi alabileceğiniz topveya kullanabileceğiniz işlem kimliğinizle değiştirinps
Navigatron


21

ps -eLfKabukta size şu anda sistemde çalışan tüm iş parçacıklarının ve işlemlerin bir listesini verecektir. Veya, topileti dizisi listelerini değiştirmek için komutu çalıştırıp 'H' tuşuna basabilirsiniz .


Bu benim için sos. Bunu sadece bir işlemle sınırlamak istemiyorum. -pGerekirse buna bir eklemek veya başka bir şey yapmak kolaydır . Konu listesini görmek için ihtiyacınız olan minimum değer budur.
Erick Robertson

6

JStack oldukça ucuzdur - bir seçenek, aktif konuları bulmak için çıktıyı grep aracılığıyla ve sonra da wc -l ile boru kullanmak olabilir.

Daha grafiksel olarak, belirli bir işlem için iş parçacığı sayısını gösteren JConsole.


6

Eğer kullanırsan:

ps uH p <PID_OF_U_PROCESS> | wc -l

Sonuca 1 çıkarmanız gerekir, çünkü "wc" sayan satırlardan biri "ps" komutunun başlıklarıdır.


StackOverflow'a hoş geldiniz. Muhtemelen, bu slav0nic'in cevabına bir yorum olmalıdır. Ancak, anladığım kadarıyla, SO'ya ilk katıldığınızda, itibar kazanana kadar (hala) cevaplar hakkında yorum yapamazsınız, bu nedenle bir cevap eklemek, yapabileceğiniz her şeyle ilgilidir. Haklısın; başlık satırını konu başlıklarından psbiri olarak saymamalısınız.
Jonathan Leffler

6

İşte belirli bir işlemin iş parçacığı sayısını gösteren bir komut:

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

Diğer pstemelli cevaplardan farklı olarak, seçenek sayesinde başlık satırı olmadığı için burada 1çıktısından çıkarmaya gerek yoktur .ps-o pid=


5

$ ps H p pid-id

H - Bir süreçteki tüm bireysel konuları listeler

veya

$cat /proc/pid-id/status

pid-id, İşlem Kimliğidir

ör. (Aşağıdaki çıktı kesildi)

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

4

Daha yeni JDK dağıtımları JConsole ve VisualVM ile birlikte gönderilir. Her ikisi de çalışan bir Java işleminden kirli ayrıntıları almak için harika araçlardır. Bunu programlı olarak yapmanız gerekiyorsa, JMX'i araştırın.


2

jvmtop , diğer ölçümlerin yanında mevcut jvm iş parçacığı sayısını gösterebilir.


2

En kolay yol "htop" kullanmaktır. Size tüm çekirdeklerinizi, işlemlerinizi ve bellek kullanımınızı gösterecek olan "htop" ı (top'un daha süslü bir sürümü) kurabilirsiniz.

Tüm süreci göstermek için "Shift + H" tuşlarına basın veya gizlemek için tekrar basın. İşlem adınızı aramak için "F4" tuşuna basın.

Ubuntu veya Debian'a yükleme:

sudo apt-get install htop

Redhat veya CentOS üzerine yükleme:

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

"Htop" u kaynak kodundan derlemek istiyorsanız, burada bulacaksınız .


1

Belirli bir pid için cpu kullanan iş parçacığı sayısını bulmaya çalışıyorsanız, şunu kullanırım:

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

0

Boşta oturup canlı olarak oturmak yerine , gerçekten aktif olan konularla ilgileniyorsanız - bir şeyler yapmak gibi (bloke değil, zamanlanmış_beklemede değil, "iş parçacığı çalıştığını" bildirmemek, ancak gerçekten bir akışın veri vermesini beklemek) - - o zaman jstack-active ile ilgilenebilirsiniz .

Bu basit bash betiği, jstackdaha sonra sezgisel yöntemlerle boşta çalışıyor gibi görünen tüm iş parçacıklarını filtreler ve size aslında CPU döngülerini tüketen iş parçacıkları için yığın izlerini gösterir.


0

VisualVM, belirli bir JVM işleminin iş parçacığı durumlarını net gösterebilir

görüntü açıklamasını buraya girin


1
kendinden indüklenen thrashing? dang!
Andrew Scott Evans

0

Bir linux sisteminde kullanıcı başına iş parçacığı sayısını istiyorsanız şunu kullanmalısınız:

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

nerede istediğiniz kullanıcı adını kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.