2011-09-04 15 views

Odpowiedz

4

Od Documentation/filesystems/proc.txt:

(...) Te numery identyfikacji ilość czasu CPU spędził wykonywania różne rodzaje pracy. Jednostki czasu są w USER_HZ (zwykle setne sekundy).

Tak, aby dowiedzieć się, jeśli chodzi o wykorzystanie w procentach trzeba:

  • Sprawdzaj co USER_HZ jest na maszynie
  • dowiedzieć się, jak długo to było, ponieważ system uruchomiony.

Druga jest łatwa: w tym samym pliku znajduje się linia btime, której można użyć do tego. Dla USER_HZ, sprawdź How to get number of mili seconds per jiffy.

+0

Spróbuję tego i wrócę. – jgr

+0

Pozwoli to uzyskać łączną kwotę% wydanych na użytkownika, ładne itp., Prawda? Jestem uwikłany w bieżącą kwotę, tj. W chwili obecnej. – jgr

+0

Musisz to śledzić, czytając ten plik na przykład co sekundę i "różnicując wartości". – Mat

10

Ten kod oblicza rozkład wykorzystania użytkowników na wszystkich rdzeniach.

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()