मैं लिनक्स पर एक प्रक्रिया के थ्रेड काउंट की निगरानी कैसे कर सकता हूं?


135

मैं लिनक्स पर एक विशिष्ट प्रक्रिया द्वारा उपयोग किए जाने वाले थ्रेड्स की संख्या की निगरानी करना चाहूंगा। क्या प्रक्रिया के प्रदर्शन को प्रभावित किए बिना इस जानकारी को प्राप्त करने का एक आसान तरीका है?


कैसे के बारे में अगर एक आवेदन की प्रक्रिया केवल थोड़े समय के लिए चलती है? (2 सेकंड कहो।)
user2023370

जवाबों:


152

प्रयत्न

ps huH p <PID_OF_U_PROCESS> | wc -l

या htop


3
मेरा मानना ​​है कि आपको इससे घटाना चाहिए 1क्योंकि यह USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDटेबल हेडर के लिए एक लाइन प्रिंट करता है ।
अहमतबी -

2
'H' हेडर को छुपाता है।
विचारशील

11
-1 wcजब आप सिर्फ कर सकते हैं तो आउटपुट को क्यों पाइप करें ps -o thcount <pid>? इस जवाब को देखें ।
प्रवाह

73

दिए गए pid के लिए थ्रेड्स की संख्या प्राप्त करने के लिए:

$ ps -o nlwp <pid>

कहाँ nlwpके लिए खड़ा है प्रकाश वजन की संख्या (सूत्र) प्रक्रियाओं । इस प्रकार psउपनाम nlwpके लिए thcount, जिसका अर्थ है कि

$ ps -o thcount <pid>

काम भी करता है।

यदि आप थ्रेड काउंट की निगरानी करना चाहते हैं, तो बस उपयोग करें watch:

$ watch ps -o thcount <pid>

सिस्टम में चल रहे सभी थ्रेड्स का योग प्राप्त करने के लिए:

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

2
सबसे उपयोगी जवाब यहाँ। खासकर watchकमान। हालांकि, ध्यान दें कि उपयोग thcountकरना कुछ (Red Hat ...) के लिए विफल हो सकता है, हालांकि nlwpमेरे लिए काम किया है।
जोशुआ डेटेलर

50

प्रक्रिया में प्रत्येक थ्रेड के तहत एक निर्देशिका बनाता है /proc/<pid>/task। निर्देशिकाओं की संख्या की गणना करें, और आपके पास थ्रेड्स की संख्या है।


1
उपरोक्त टिप्पणी में जोड़ने के लिए। थ्रेड्स की संख्या ज्ञात करने के लिए आप इस कमांड का उपयोग कर सकते हैं find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l:। बस अपनी प्रक्रिया आईडी से <PID> को बदलें जिसे आप प्राप्त कर सकते हैं topया उपयोग कर सकते हैंps
Navigatron


21

ps -eLfशेल आपको सिस्टम पर वर्तमान में चल रहे सभी थ्रेड्स और प्रक्रियाओं की एक सूची देगा। या, आप topथ्रेड थ्रेड लिस्टिंग टॉगल करने के लिए 'H' हिट कर सकते हैं ।


यह मेरे लिए सॉस है। मैं इसे केवल एक प्रक्रिया तक सीमित नहीं करना चाहता। -pयदि आवश्यक हो, या कुछ और इसके लिए इसे जोड़ना आसान है। यह न्यूनतम है जिसे आपको थ्रेड लिस्ट देखने की आवश्यकता है।
एरिक रॉबर्टसन

6

JStack काफी सस्ती है - एक विकल्प यह होगा कि सक्रिय थ्रेड को खोजने के लिए grep के माध्यम से आउटपुट को पाइप किया जाए और फिर wc -l के माध्यम से पाइप किया जाए।

अधिक आलेखीय रूप से JConsole है, जो किसी दी गई प्रक्रिया के लिए थ्रेड काउंट प्रदर्शित करता है।


6

यदि तुम प्रयोग करते हो:

ps uH p <PID_OF_U_PROCESS> | wc -l

आपको परिणाम में 1 घटाना होगा, क्योंकि "wc" की गिनती में से एक "ps" कमांड का हेडर है।


StackOverflow में आपका स्वागत है। तर्क से, यह एक टिप्पणी के लिए एक टिप्पणी होनी चाहिए। हालाँकि, जैसा कि मैं इसे समझता हूँ, जब आप पहली बार एसओ में शामिल होते हैं, तो आप (तब भी) जवाब पर टिप्पणी नहीं कर सकते जब तक कि आपने कुछ प्रतिष्ठा प्राप्त नहीं की है, इसलिए एक उत्तर जोड़ना आप सभी के बारे में कर सकते हैं। तुम सही हो; आपको psकिसी एक सूत्र से शीर्ष लेख पंक्ति की गणना नहीं करनी चाहिए ।
जोनाथन लेफ़लर

6

यहां एक आदेश है जो किसी दी गई प्रक्रिया के थ्रेड्स की संख्या प्रदर्शित करता है:

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

अन्य psआधारित उत्तरों के विपरीत , यहाँ 1इसके आउटपुट से स्थानापन्न करने की आवश्यकता नहीं psहै क्योंकि -o pid=विकल्प के लिए हेडर लाइन नहीं है ।


5

$ ps H p pid-id

एच - एक प्रक्रिया में सभी व्यक्तिगत धागे को सूचीबद्ध करता है

या

$cat /proc/pid-id/status

pid-id प्रोसेस आईडी है

उदा .. (निम्न आउटपुट को छोटा किया गया)

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

4

नए JDK JConsole और VisualVM के साथ जहाज वितरित करता है। चल रहे जावा प्रक्रिया से गंदे विवरण प्राप्त करने के लिए दोनों शानदार उपकरण हैं। यदि आपको यह प्रोग्रामेटिक रूप से करना है, तो JMX की जांच करें।


2

jvmtop अन्य मैट्रिक्स के बगल में वर्तमान jvm थ्रेड काउंट दिखा सकता है।


2

सबसे आसान तरीका "htop" का उपयोग कर रहा है। आप "htop" (शीर्ष का एक कट्टर संस्करण) स्थापित कर सकते हैं जो आपको आपके सभी कोर, प्रक्रिया और स्मृति उपयोग दिखाएगा।

सभी प्रक्रिया दिखाने के लिए "Shift + H" दबाएं या इसे छिपाने के लिए फिर से दबाएं। अपनी प्रक्रिया का नाम खोजने के लिए "F4" कुंजी दबाएँ।

उबंटू या डेबियन पर स्थापित:

sudo apt-get install htop

Redhat या CentOS पर स्थापित करना:

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

यदि आप स्रोत कोड से "htop" संकलित करना चाहते हैं, तो आप इसे यहां पाएंगे ।


1

यदि आप किसी दिए गए पिड के लिए सीपीयू का उपयोग करके थ्रेड्स की संख्या जानने की कोशिश कर रहे हैं तो मैं उपयोग करूंगा:

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

0

यदि आप उन थ्रेड्स में रुचि रखते हैं जो वास्तव में सक्रिय हैं - जैसे कि कुछ करने में (अवरुद्ध नहीं, समयबद्ध नहीं है, "थ्रेड रनिंग" की रिपोर्ट नहीं कर रहा है, लेकिन वास्तव में डेटा देने के लिए एक धारा की प्रतीक्षा कर रहा है) तो बेकार बैठे रहने के विपरीत, लेकिन लाइव - - तब आपको jstack-active में रुचि हो सकती है

यह सरल बैश स्क्रिप्ट jstackतब चलती है , जो सभी थ्रेड्स को फ़िल्टर करती है, जो कि आकृति विज्ञान द्वारा सुस्ती लगती है, आपको उन थ्रेड्स के लिए स्टैक के निशान दिखाती है जो वास्तव में सीपीयू चक्रों का उपभोग कर रहे हैं।



0

यदि आप किसी Linux सिस्टम में प्रति उपयोगकर्ता थ्रेड की संख्या चाहते हैं तो आपको उपयोग करना चाहिए:

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

जहां वांछित उपयोगकर्ता नाम का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.