2011-09-04 9 views
7

/proc/stat से पता चलता उपयोगकर्ता, अच्छा, सिस के लिए टिक्स, निष्क्रिय, iowait, आईआरक्यू और sirq इस तरह:गिना जा रहा है उपयोगकर्ता, अच्छा, सिस, निष्क्रिय, iowait, आईआरक्यू और से/proc sirq/स्टेट

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

मैं इन मानों के साथ उपयोगकर्ता, अच्छा आदि के लिए व्यक्तिगत उपयोग (% में) की गणना कैसे कर सकता हूं? 'शीर्ष' या 'vmstat' में दिखाए गए मानों की तरह।

उत्तर

4

Documentation/filesystems/proc.txt से:

(...) ये संख्या समय सीपीयू काम के विभिन्न प्रकार के प्रदर्शन बिताया है की राशि की पहचान। टाइम यूनिट्स यूएसER_एचजेड (आमतौर पर एक सेकेंड के सौवां) में हैं।

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

  • पता लगाएँ कि USER_HZ मशीन
  • जानकारी प्राप्त के बाद से प्रणाली हटा दिया गया कितना समय हो गया है पर है।

दूसरा एक आसान है: उस फ़ाइल में btime लाइन है जिसका उपयोग आप इसके लिए कर सकते हैं। USER_HZ के लिए, How to get number of mili seconds per jiffy देखें।

+0

मैं इसे आजमाउंगा और वापस आऊंगा। – jgr

+0

इससे मुझे उपयोगकर्ता, अच्छा इत्यादि में खर्च की गई कुल राशि मिल जाएगी, है ना? मैं वर्तमान समय में interrested हूँ, यानी वर्तमान समय में। – jgr

+0

आपको उस फ़ाइल को पढ़ने के द्वारा स्वयं को ट्रैक करने की आवश्यकता है उदाहरण के लिए प्रत्येक सेकेंड और मानों को "diff" करें। – Mat

10

यह कोड सभी कोरों पर फैले उपयोगकर्ता उपयोग की गणना करता है।

import os 
import time 
import multiprocessing 

def main(): 
    jiffy = os.sysconf(os.sysconf_names['SC_CLK_TCK']) 
    num_cpu = multiprocessing.cpu_count() 

    stat_fd = open('/proc/stat') 
    stat_buf = stat_fd.readlines()[0].split() 
    user, nice, sys, idle, iowait, irq, sirq = (float(stat_buf[1]), float(stat_buf[2]), 
              float(stat_buf[3]), float(stat_buf[4]), 
              float(stat_buf[5]), float(stat_buf[6]), 
              float(stat_buf[7])) 

    stat_fd.close() 

    time.sleep(1) 

    stat_fd = open('/proc/stat') 
    stat_buf = stat_fd.readlines()[0].split() 
    user_n, nice_n, sys_n, idle_n, iowait_n, irq_n, sirq_n = (float(stat_buf[1]), float(stat_buf[2]),. 
                  float(stat_buf[3]), float(stat_buf[4]), 
                  float(stat_buf[5]), float(stat_buf[6]), 
                  float(stat_buf[7])) 

    stat_fd.close() 

    print ((user_n - user) * 100/jiffy)/num_cpu 

if __name__ == '__main__': 
    main() 
संबंधित मुद्दे