文档详情

计算Linux系统和进程的CPU及内存使用率.doc

发布:2015-09-09约8.8千字共8页下载文档
文本预览下载声明
基本原理 1)系统CPU使用率等于两个时间点的CPU非空闲时间差除以CPU时间总量差得到的百分比,这两者可从/proc/stat文件获得。 2)系统内存使用率等于系统物理内存消耗量除以系统物理内存总量(memtotal,以KB为单位)得到的百分比,这两者可从/proc/meminfo文件获得。 3)进程CPU使用率等于进程CPU时间(pct,以jiffies为单位)除以进程运行时间(pt)得到的百分比,pct从/proc/pid/stat文件读取utime和stime字段相加即得,pt等于系统运行时间(st,以秒为单位)减去进程启动时间(pst,以jiffies为单位),st从/proc/uptime文件获得,pst从/proc/pid/stat文件读取starttime字段获得。 4)进程内存使用率等于进程驻留集大小(rss)除以系统物理内存总量(memtotal,以KB为单位)得到的百分比,rss从/proc/pid/stat读取rss字段得到,以页数为单位。 代码实现 1)基本结构和接口定义在proc_stat.h头文件内,如下所示 1struct sys_cpu_time 2{ 3 unsigned long long user,old_user; 4 unsigned long long nice,old_nice; 5 unsigned long long sys,old_sys; 6 unsigned long long idle,old_idle; 7 unsigned long long wait,old_wait; 8 unsigned long long hirq,old_hirq; 9 unsigned long long sirq,old_sirq; 10}; 11 12struct sys_uptime 13{ 14 double uptime; 15 double idle; 16}; 17 18struct sys_mem_info 19{ 20 unsigned long main_total; 21 unsigned long main_free; 22 unsigned long main_used; 23 unsigned long main_buffers; 24 unsigned long main_cached; 25 unsigned long swap_total; 26 unsigned long swap_free; 27 unsigned long swap_used; 28 unsigned long swap_cached; 29}; 30 31struct system_stat 32{ 33 sys_cpu_time ct; 34 sys_mem_info mi; 35 sys_uptime ut; 36}; 37 38struct process_stat 39{ 40 char name[16]; 41 char state; 42 int ppid; 43 int pgrp; 44 int session; 45 int tty_nr; 46 int tpgid; 47 unsigned int flags; 48 unsigned long minflt; 49 unsigned long cminflt; 50 unsigned long majflt; 51 unsigned long cmajflt; 52 unsigned long utime; 53 unsigned long stime; 54 long cutime; 55 long cstime; 56 long priority; 57 long nice; 58 long threads; 59 long iterealvalue; 60 unsigned long long starttime; 61 unsigned long vsize; 62 long rss; 63}; 64 65struct sys_mem_entry 66{ 67 const char *name; 68 unsigned long *val; 69} ; 70 71 static const int PROC_STAT = 0x0001; 72static
显示全部
相似文档