2011-09-04 28 views
7

/proc/stat cho thấy bọ ve cho người sử dụng, đẹp, sys, nhàn rỗi, iowait, irq và sirq như thế này:Tính toán sử dụng, đẹp, sys, nhàn rỗi, iowait, irq và sirq từ/proc/stat

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

Làm cách nào tôi có thể tính toán việc sử dụng riêng lẻ (bằng%) cho người dùng, v.v ... với các giá trị này? Giống như các giá trị hiển thị trong 'top' hoặc 'vmstat'.

Trả lời

4

Từ Documentation/filesystems/proc.txt:

(...) Những con số này xác định số lượng thời gian CPU đã chi thực hiện loại công việc khác nhau. Đơn vị thời gian nằm trong USER_HZ (thường là một phần trăm giây).

Vì vậy, để tìm ra sử dụng về tỷ lệ phần trăm bạn cần phải:

  • Tìm hiểu USER_HZ là những gì trên máy
  • Tìm hiểu nó được bao lâu kể từ khi hệ thống khởi động.

Cách thứ hai dễ dàng: có một dòng btime trong cùng một tệp mà bạn có thể sử dụng cho điều đó. Đối với USER_HZ, hãy xem How to get number of mili seconds per jiffy.

+0

Tôi sẽ thử điều này và quay lại. – jgr

+0

Điều này sẽ cho tôi tổng số tiền được chi tiêu trong người dùng, v.v., đúng không? Tôi bị can thiệp vào số tiền hiện tại, tức là tại thời điểm hiện tại. – jgr

+0

Bạn cần phải tự mình theo dõi bằng cách đọc tệp đó ví dụ như mỗi giây và "khác" để nhập các giá trị. – Mat

10

Mã này tính toán mức độ sử dụng của người dùng trên tất cả các lõi.

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() 
Các vấn đề liên quan