基本原理
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{
3unsigned long long user,old_user;
4unsigned long long nice,old_nice;
5unsigned long long sys,old_sys;
6 unsigned long long idle,old_idle;
7unsigned long long wait,old_wait;
8unsigned long long hirq,old_hirq;
9unsigned long long sirq,old_sirq;
10};
11
12struct sys_uptime
13{
14double uptime;
15double idle;
16};
17
18struct sys_mem_info
19{
20unsigned long main_total;
21unsigned long main_free;
22unsigned long main_used;
23unsigned long main_buffers;
24unsigned long main_cached;
25unsigned long swap_total;
26unsigned long swap_free;
27unsigned long swap_used;
28unsigned long swap_cached;
29};