计算Linux系统和进程的CPU及内存使用率.doc
文本预览下载声明
基本原理 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};1112struct sys_uptime13{14 double uptime;15 double idle;16};1718struct sys_mem_info19{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};3031struct system_stat32{33 sys_cpu_time ct;34 sys_mem_info mi;35 sys_uptime ut;36};3738struct process_stat39{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};6465struct sys_mem_entry66{67 const char *name;68 unsigned long *val;69} ;7071 static const int PROC_STAT = 0x0001;72static
显示全部