लिनक्स पर एक ही प्रक्रिया के CPU उपयोग और मेमोरी उपयोग को पुनः प्राप्त करें?


165

मैं लिनक्स पर एक ही प्रक्रिया का सीपीयू और मेमोरी उपयोग प्राप्त करना चाहता हूं - मुझे पीआईडी ​​पता है। उम्मीद है, मैं इसे हर सेकंड प्राप्त कर सकता हूं और 'घड़ी' कमांड का उपयोग करके सीएसवी को लिख सकता हूं। लिनक्स कमांड-लाइन से यह जानकारी प्राप्त करने के लिए मैं किस कमांड का उपयोग कर सकता हूं?


11
सुपरयूजर पर विश्वास करता है।
रिचर्ड

क्या हम जीडीपी का उपयोग गेटपीड और टॉप-पी <उस पीआईडी> को कॉल करने के लिए कर सकते हैं?
मजा

जवाबों:


226
ps -p <pid> -o %cpu,%mem,cmd

(आप "cmd" छोड़ सकते हैं लेकिन यह डिबगिंग में सहायक हो सकता है)।

ध्यान दें कि यह उस प्रक्रिया का औसत सीपीयू उपयोग करता है जो उस समय से चल रहा है।


6
धारणा यह होगी कि यदि आप किसी एकल प्रक्रिया के मेमोरी उपयोग के बारे में इस तरह की निगरानी करने के लिए पर्याप्त देखभाल करते हैं, तो यह महत्वपूर्ण मात्रा में मेमोरी का उपयोग कर रहा है ताकि साझा मैपिंग के कारण अतिरिक्त युगल-ऑफ-मेगाबाइट कोई समस्या न हो।
कैफे

5
@चैतन्य: | tail -n +2
कैफे

11
या आप
हेनेडर का

45
ध्यान रखें कि% cpu "सीपीयू समय का उपयोग उस समय से विभाजित किया जाता है जब प्रक्रिया चल रही है (cputime / realtime अनुपात), एक प्रतिशत के रूप में व्यक्त किया गया" (देखें manpage of ps)। यह केवल CPU उपयोग में वास्तविक नहीं है। topउदाहरण के लिए, यह शो से बहुत अलग हो सकता है ।
xebeche

12
जैसा कि ऊपर दिए गए ज़ेबेचे से कहा ps -e -o pcpu,argsगया है, इस प्रक्रिया के जीवनकाल में सीपीयू औसत दिखाएगा, जो स्पष्ट रूप से नहीं है कि आप क्या चाहते हैं यदि यह एक लंबी चलने वाली प्रक्रिया है
एलेक्स एफ


37

आप प्रक्रिया का उपयोग करके नाम प्राप्त कर सकते हैं

ps -C chrome -o %cpu,%mem,cmd

-Cविकल्प आपको यह पीआईडी जानने के बिना प्रक्रिया नाम का उपयोग करने की अनुमति देता है।


कैसे भी शामिल करने के लिए de pid? इहावे ने% pid $ PID pid, PID विद नो लक की कोशिश की
अर्नोल्ड रोया

@AnnoldRoa को pidही काम करना चाहिए। ps -C chrome -o pid,%cpu,%mem,cmd
मुहम्मद ताह

28

Pidstat (sysstat - Refer Link से ) का उपयोग करें ।

इन 5 प्रक्रिया आईडी (12345 और 11223) की निगरानी के लिए हर 5 सेकंड का उपयोग करना

$ pidstat -h -r -u -v -p 12345,11223 5

2
pidstatयह एक महान आदेश है, और पटकथा के लिए भी काम करने के लिए धन्यवाद !
fduff

pidstatएक अच्छा औसत भी देता है। बस एक शर्म की बात है कि मुझे इससे ज्यादा खूबसूरत तरीका नहीं मिला हैpidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
उत्तरी-ब्रैडले

24

ps कमांड (उपयोग नहीं करना चाहिए):

top कमांड (उपयोग करना चाहिए):

topवास्तविक समय में CPU उपयोग प्राप्त करने के लिए उपयोग करें (वर्तमान छोटा अंतराल):

top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'

प्रतिध्वनि होगी: 78.6


यह वर्तमान सीपीयू उपयोग प्राप्त करने के लिए सबसे सटीक उत्तर है, प्रक्रिया के जीवनकाल में औसत नहीं।
टेड फेंग

15

एक कार्यक्रम लॉन्च करें और इसकी निगरानी करें

यदि आप किसी निष्पादन योग्य को आसानी से बेंचमार्क करना चाहते हैं तो यह फ़ॉर्म उपयोगी है:

topp() (
  $* &>/dev/null &
  pid="$!"
  trap ':' INT
  echo 'CPU  MEM'
  while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
  kill "$pid"
)
topp ./myprog arg1 arg2

अब जब आप Ctrl + C दबाते हैं, तो यह प्रोग्राम से बाहर निकल जाता है और निगरानी बंद कर देता है। नमूना उत्पादन:

CPU  MEM
20.0  1.3
35.0  1.3
40.0  1.3

संबंधित: /unix/554/how-to-monitor-cpu-memory-usage-of-a-single-process

उबंटू 16.04 पर परीक्षण किया गया।


5

आप अपने top -bइच्छित पिड ( -bबैच मोड में फ्लैग टॉप रन के साथ ) का उपयोग कर सकते हैं, या -pझंडे का उपयोग कर सकते हैं और बिना grep का उपयोग किए पीआईडी ​​निर्दिष्ट कर सकते हैं।


5

जैसा कि ऊपर के कैफे के उत्तर में टिप्पणी की गई है, पीएस और कुछ मामलों में पिडस्टेट आपको पीपीसीयू का जीवनकाल औसत देगा। अधिक सटीक परिणाम प्राप्त करने के लिए शीर्ष का उपयोग करें। यदि आपको दौड़ने के लिए एक बार शीर्ष दौड़ने की आवश्यकता है:

top -b -n 1 -p <PID>

या प्रक्रिया के लिए केवल डेटा और हेडर:

top -b -n 1 -p <PID> | tail -3 | head -2

बिना हेडर के:

top -b -n 1 -p <PID> | tail -2 | head -1

3
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr

या प्रति प्रक्रिया

ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql

1

बस अपने एप्लिकेशन की मेमोरी का उपयोग करने के लिए (जैसा कि यह साझा की गई लाइब्रेरी का विरोध करता है, आपको लिनक्स स्मैप इंटरफ़ेस का उपयोग करने की आवश्यकता है)। यह उत्तर इसे अच्छी तरह से समझाता है



1
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep

PID - प्रक्रिया आईडी

etime - प्रोसेस रनिंग / लाइव अवधि

% सीपीयू - सीपीयू उपयोग

% मेम - मेमोरी उपयोग

cmd - कमांड

आप जिस भी प्रक्रिया को ट्रैक करना चाहते हैं, उसके साथ प्रक्रियानाम बदलें, mysql nginx php-fpm आदि ...


1

यहां सभी उत्तर PID के लिए केवल मेमोरी प्रतिशत दर्शाते हैं।

यहां पर सभी अपाचे प्रक्रियाओं के लिए KB मेमोरी में rss मेमोरी का उपयोग कैसे करें, "grep apache" को "grep PID" से बदलें, यदि आप एक विशिष्ट PID देखना चाहते हैं:

watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'"

यह प्रिंट:

Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}'                                                                                                                                                                                                          
Thu Jan 25 15:44:13 2018

12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360

CPU% के साथ:

watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'"

आउटपुट:

Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}'                                                                                                                                                                                                       
Thu Jan 25 15:46:00 2018

12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360

1

उन लोगों के लिए जो कुछ समय के लिए संघर्ष करते थे कि चयनित उत्तर काम क्यों नहीं करता है:

ps -p <pid> -o %cpu,%mem

कोई अंतरिक्ष ibetween %cpu,और %mem


1

यह वास्तविक समय में एक या एक से अधिक कार्यक्रमों का पालन करने के लिए एक अच्छी चाल है, जबकि कुछ अन्य टूल का आउटपुट भी देखते हैं: watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"


1

निम्नलिखित कमांड को विशिष्ट प्रक्रिया (पीआईडी) के लिए हर 40 सेकंड में सीपीयू और मेमोरी उपयोग का औसत मिलता है

pidstat 40 -ru -p <pid>

मेरे मामले के लिए आउटपुट (CPU उपयोग के लिए पहली दो लाइनें, मेमोरी के लिए दूसरी दो लाइनें):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java

0

(यदि आप MacOS 10.10 में हैं, तो शीर्ष पर संचयी -c विकल्प आज़माएँ:

top -c a -pid PID

(यह विकल्प अन्य लिनक्स में उपलब्ध नहीं है, वैज्ञानिक लिनक्स el6 और RHEL6 के साथ आज़माया गया है)


0

ऊपर सीपीयू और मेमोरी खपत प्रक्रिया के ऊपर सूची

        ps axo %cpu,%mem,command | sort -nr | head

0

@ कैफे के जवाब के आधार पर, यह मेरे लिए अच्छी तरह से काम कर रहा है।

दिए गए PID के लिए औसत गणना करें:

measure.sh

times=100
total=0
for i in $(seq 1 $times)
do
   OUTPUT=$(top -b -n 1 -d 0.1 -p $1 | tail -1 | awk '{print $9}')
   echo -n "$i time: ${OUTPUT}"\\r
   total=`echo "$total + $OUTPUT" | bc -l`
done
#echo "Average: $total / $times" | bc

average=`echo "scale=2; $total / $times" | bc`
echo "Average: $average"

उपयोग:

# send PID as argument
sh measure.sh 3282

-2

लिनक्स पर एक ही प्रक्रिया का सीपीयू और मेमोरी उपयोग या आप नीचे कमांड का उपयोग करके शीर्ष 10 सीपीयू उपयोग की प्रक्रियाएं प्राप्त कर सकते हैं

ps -aux --sort -pcpu | सिर -n ११

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