man ps
में NOTES
खंड।
CPU usage is currently expressed as the percentage of time spent running
during the entire lifetime of a process. This is not ideal, and it does not
conform to the standards that ps otherwise conforms to. CPU usage is
unlikely to add up to exactly 100%.
और, लगता है कि आप जानते हैं, लेकिन आप यह भी कर सकते हैं:
top -p <PID>
संपादित करें : अन्य उत्तर पर आपकी टिप्पणी के अनुसार;
" हम्म हाँ मुझे आश्चर्य है कि कैसे (तत्काल सीपीयू प्रतिशत) पीएस से प्राप्त करने के लिए "
संक्षिप्त उत्तर: आप नहीं कर सकते।
ऐसा क्यों है?
यह किसी से एक तस्वीर से कार की गति की गणना करने के लिए कहने जैसा है।
जबकि top
एक निगरानी उपकरण है, ps
एक स्नैपशॉट उपकरण है। इसे इस तरह समझें: किसी भी समय एक प्रक्रिया या तो सीपीयू का उपयोग करती है या नहीं। इस प्रकार आपके पास उस सटीक क्षण में या तो 0% या 100% लोड है।
देते हुए: अगर ps
देना चाहिए तत्काल CPU उपयोग यह या तो 0% या 100% होगा।
top
दूसरी ओर मतदान संख्या बनाए रखें और समय के साथ लोड की गणना करें।
ps
वर्तमान उपयोग दे सकता है - लेकिन इसके लिए कई बार डेटा पढ़ने और प्रत्येक पढ़ने के बीच सोने की आवश्यकता होगी। यह नहीं है
पीएस% सीपीयू के लिए गणना
ps
निम्नलिखित तरीके से CPU उपयोग की गणना करता है:
uptime = कुल समय प्रणाली चल रही है।
ps_time = प्रक्रिया प्रारंभ समय बूट से सेकंड में मापा जाता है।
pu_time = कुल समय प्रक्रिया CPU का उपयोग कर रही है।
;; सेकंड प्रक्रिया चल रही है:
सेकंड = अपटाइम - ps_time
;; उपयोग:
cpu_usage = pu_time * 1000 / सेकंड
प्रिंट: cpu_usage / 10 "।" cpu_usage% 10
उदाहरण:
अपटाइम = 344,545
ps_time = 322,462
pu_time = 3,383
सेकंड = 344,545 - 322,462 = 22,083
cpu_usage = 3,383 * 1,000 / 22,083 = 153
प्रिंट: 153/10 "।" 153% 10 => 15.3
तो छपी संख्या है: जीवनकाल के दौरान सीपीयू का उपयोग करने की प्रक्रिया। जैसा कि ऊपर के उदाहरण में है। यह अपने जीवनकाल के 15.3% में ऐसा कर चुका है। 84,7% समय में यह सीपीयू पर खराब नहीं हुआ है।
डेटा की पुनःप्राप्ति
ps
, साथ ही top
, /proc/
- या प्रक्रिया जानकारी छद्म-फ़ाइल सिस्टम के तहत संग्रहीत फ़ाइलों के डेटा का उपयोग करता है ।
आपके पास रूट की कुछ फाइलें हैं /proc/
जो सिस्टम की समग्र स्थिति के बारे में विभिन्न जानकारी रखती हैं। इसके अलावा प्रत्येक प्रक्रिया का अपना उप फ़ोल्डर होता है /proc/<PID>/
जहां प्रक्रिया विशिष्ट डेटा संग्रहीत होता है। इसलिए, उदाहरण के लिए आपके प्रश्न से प्रक्रिया में एक फ़ोल्डर था /proc/3038/
।
जब ps
CPU उपयोग की गणना करता है तो यह दो फाइलों का उपयोग करता है:
/ proc / uptime सिस्टम का अपटाइम (सेकंड), और निष्क्रिय प्रक्रिया (सेकंड) में बिताए समय की मात्रा।
/ proc / [PID] / प्रक्रिया के बारे में स्टेटस की जानकारी।
- इसमें से
uptime
पहले मूल्य ( अपटाइम ) का उपयोग किया जाता है ।
- इसमें से
[PID]/stat
निम्नलिखित का उपयोग किया गया है:
# नाम का विवरण
उपयोगकर्ता कोड में बिताए 14 utime CPU समय, jiffies में मापा जाता है
15 stime CPU समय कर्नेल कोड में बिताया, jiffies में मापा जाता है
बच्चों से समय सहित उपयोगकर्ता कोड में 16 कटाइम सीपीयू समय बिताया
17 cstime CPU समय बच्चों से समय सहित कर्नेल कोड में बिताया
22 शुरुआत समय जब प्रक्रिया शुरू हुई, जिफ़ियों में मापा गया
एक जिफ़ी घड़ी की टिक टिक है। इसलिए इसके अलावा यह विभिन्न तरीकों का उपयोग करता है, अर्थात, sysconf(_SC_CLK_TCK)
सिस्टम के हर्ट्ज़ (प्रति सेकंड टिक्सेस की संख्या) प्राप्त करने के लिए - अंततः अन्य विकल्पों को समाप्त करने के बाद फ़ॉल-बैक के रूप में 100 का उपयोग करना।
तो अगर utime
1234 है और हर्ट्ज 100 है तो:
seconds = utime / Hertz = 1234 / 100 = 12.34
वास्तविक गणना इसके द्वारा की जाती है:
total_time = utime + stime
IF include_dead_children
total_time = total_time + cutime + cstime
ENDIF
seconds = uptime - starttime / Hertz
pcpu = (total_time * 1000 / Hertz) / seconds
print: "%CPU" pcpu / 10 "." pcpu % 10
उदाहरण (एक कस्टम बैश स्क्रिप्ट से आउटपुट):
$ ./psw2 30894
System information
uptime : 353,512 seconds
idle : 0
Process information
PID : 30894
filename : plugin-containe
utime : 421,951 jiffies 4,219 seconds
stime : 63,334 jiffies 633 seconds
cutime : 0 jiffies 0 seconds
cstime : 1 jiffies 0 seconds
starttime : 32,246,240 jiffies 322,462 seconds
Process run time : 31,050
Process CPU time : 485,286 jiffies 4,852 seconds
CPU usage since birth: 15.6%
पीएस के साथ "वर्तमान" लोड की गणना
यह एक (बिट?) छायादार प्रयास है, लेकिन ठीक है। चलो चलें।
इसके द्वारा प्रदान किए गए ps
सीपीयू के उपयोग और गणना के समय का उपयोग किया जा सकता है । जब इसके बारे में सोचना वास्तव में उपयोगी हो सकता है, तो कुछ सीमाओं के साथ।
यह सीपीयू उपयोग की लंबी अवधि में गणना करने के लिए उपयोगी हो सकता है। Ie का कहना है कि आप plugin-container
फ़ायरफ़ॉक्स से संबंधित कार्य करते समय फ़ायरफ़ॉक्स में औसत सीपीयू लोड की निगरानी करना चाहते हैं ।
से उत्पादन का उपयोग करके:
$ ps -p -o cputime, etimes
CODE HEADER DESCRIPTION
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format. (alias time).
etime ELAPSED elapsed time since the process was started, [DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in seconds.
मैं उपयोग etime
के ऊपर etimes
इस नमूने में, गणना पर, केवल थोड़ा अधिक स्पष्ट होना। इसके अलावा मैं "मज़ा" के लिए% सीपीयू जोड़ता हूं। यानी बैश स्क्रिप्ट में एक स्पष्ट रूप से उपयोग किया जाएगा etimes
- या बेहतर से पढ़ा /proc/<PID>/
आदि।
Start:
$ ps -p 30894 -o %cpu,cputime,etime,etimes
%CPU TIME ELAPSED ELAPSED
5.9 00:13:55 03:53:56 14036
End:
%CPU TIME ELAPSED ELAPSED
6.2 00:14:45 03:56:07 14167
Calculate times:
13 * 60 + 55 = 835 (cputime this far)
3 * 3,600 + 53 * 60 + 56 = 14,036 (time running this far)
14 * 60 + 45 = 885 (cputime at end)
3 * 3,600 + 56 * 60 + 7 = 14,167 (time running at end)
Calculate percent load:
((885 - 835) / (14,167 - 14,036)) * 100 = 38
इस अवधि के दौरान CPU 38% प्रक्रिया का उपयोग कर रहा था।
कोड को देखो
यदि आप ps
यह जानना चाहते हैं कि यह कैसे होता है, और थोड़ा सी पता है, तो करें (ऐसा लगता है कि आप ग्नोम देबैन डेरियावेंन्ट चलाते हैं) - टिप्पणियों आदि के बारे में कोड में अच्छा रवैया:
apt-get source procps
cd procps*/ps
vim HACKING
top
, और निरंतर निगरानी - या देरी उर्फ "ps
" के साथ।