मैं लिनक्स पर एक विशिष्ट प्रक्रिया द्वारा उपयोग किए जाने वाले थ्रेड्स की संख्या की निगरानी करना चाहूंगा। क्या प्रक्रिया के प्रदर्शन को प्रभावित किए बिना इस जानकारी को प्राप्त करने का एक आसान तरीका है?
मैं लिनक्स पर एक विशिष्ट प्रक्रिया द्वारा उपयोग किए जाने वाले थ्रेड्स की संख्या की निगरानी करना चाहूंगा। क्या प्रक्रिया के प्रदर्शन को प्रभावित किए बिना इस जानकारी को प्राप्त करने का एक आसान तरीका है?
जवाबों:
दिए गए 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 }'
watch
कमान। हालांकि, ध्यान दें कि उपयोग thcount
करना कुछ (Red Hat ...) के लिए विफल हो सकता है, हालांकि nlwp
मेरे लिए काम किया है।
प्रक्रिया में प्रत्येक थ्रेड के तहत एक निर्देशिका बनाता है /proc/<pid>/task
। निर्देशिकाओं की संख्या की गणना करें, और आपके पास थ्रेड्स की संख्या है।
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
:। बस अपनी प्रक्रिया आईडी से <PID> को बदलें जिसे आप प्राप्त कर सकते हैं top
या उपयोग कर सकते हैंps
ps -eLf
शेल आपको सिस्टम पर वर्तमान में चल रहे सभी थ्रेड्स और प्रक्रियाओं की एक सूची देगा। या, आप top
थ्रेड थ्रेड लिस्टिंग टॉगल करने के लिए 'H' हिट कर सकते हैं ।
-p
यदि आवश्यक हो, या कुछ और इसके लिए इसे जोड़ना आसान है। यह न्यूनतम है जिसे आपको थ्रेड लिस्ट देखने की आवश्यकता है।
यदि तुम प्रयोग करते हो:
ps uH p <PID_OF_U_PROCESS> | wc -l
आपको परिणाम में 1 घटाना होगा, क्योंकि "wc" की गिनती में से एक "ps" कमांड का हेडर है।
ps
किसी एक सूत्र से शीर्ष लेख पंक्ति की गणना नहीं करनी चाहिए ।
$ 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
jvmtop अन्य मैट्रिक्स के बगल में वर्तमान jvm थ्रेड काउंट दिखा सकता है।
सबसे आसान तरीका "htop" का उपयोग कर रहा है। आप "htop" (शीर्ष का एक कट्टर संस्करण) स्थापित कर सकते हैं जो आपको आपके सभी कोर, प्रक्रिया और स्मृति उपयोग दिखाएगा।
सभी प्रक्रिया दिखाने के लिए "Shift + H" दबाएं या इसे छिपाने के लिए फिर से दबाएं। अपनी प्रक्रिया का नाम खोजने के लिए "F4" कुंजी दबाएँ।
उबंटू या डेबियन पर स्थापित:
sudo apt-get install htop
Redhat या CentOS पर स्थापित करना:
yum install htop
dnf install htop [On Fedora 22+ releases]
यदि आप स्रोत कोड से "htop" संकलित करना चाहते हैं, तो आप इसे यहां पाएंगे ।
यदि आप किसी दिए गए पिड के लिए सीपीयू का उपयोग करके थ्रेड्स की संख्या जानने की कोशिश कर रहे हैं तो मैं उपयोग करूंगा:
top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l
यदि आप उन थ्रेड्स में रुचि रखते हैं जो वास्तव में सक्रिय हैं - जैसे कि कुछ करने में (अवरुद्ध नहीं, समयबद्ध नहीं है, "थ्रेड रनिंग" की रिपोर्ट नहीं कर रहा है, लेकिन वास्तव में डेटा देने के लिए एक धारा की प्रतीक्षा कर रहा है) तो बेकार बैठे रहने के विपरीत, लेकिन लाइव - - तब आपको jstack-active में रुचि हो सकती है ।
यह सरल बैश स्क्रिप्ट jstack
तब चलती है , जो सभी थ्रेड्स को फ़िल्टर करती है, जो कि आकृति विज्ञान द्वारा सुस्ती लगती है, आपको उन थ्रेड्स के लिए स्टैक के निशान दिखाती है जो वास्तव में सीपीयू चक्रों का उपभोग कर रहे हैं।
यदि आप किसी Linux सिस्टम में प्रति उपयोगकर्ता थ्रेड की संख्या चाहते हैं तो आपको उपयोग करना चाहिए:
ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'
जहां वांछित उपयोगकर्ता नाम का उपयोग करें।