目录

一、设计思路

二、参考代码


一、设计思路

思路很简单:主要通过解析 /proc/stat 文件中记录的 CPU 使用详情信息。内容如下:

$ cat /proc/stat
cpu  500 0 1148 37091 0 21 0 0 0 0
cpu0 46 0 193 4603 0 17 0 0 0 0
cpu1 17 0 34 4792 0 0 0 0 0 0
cpu2 198 0 171 4473 0 3 0 0 0 0
cpu3 21 0 20 4801 0 0 0 0 0 0
cpu4 96 0 331 4415 0 0 0 0 0 0
cpu5 34 0 82 4726 0 0 0 0 0 0
cpu6 62 0 128 4653 0 0 0 0 0 0
cpu7 26 0 189 4628 0 1 0 0 0 0
intr 894498 377553 332 0 0 0 0 0 0 0 287178 0 0 1078 0 8572 189 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 494453
btime 1658673908
processes 21
procs_running 1
procs_blocked 0
softirq 531871 0 166655 5588 285920 8660 0 272 0 791 63985

该文件的第一行记录了 CPU 时间片的分布情况。字段依次为:

user

从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负进程。

nice

从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

system

从系统启动开始累计到当前时刻,核心时间

idle

从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间

iowait

从系统启动开始累计到当前时刻,IO等待时间

irq

从系统启动开始累计到当前时刻,硬中断时间

softirq

从系统启动开始累计到当前时刻,软中断时间

CPU利用率 = 1 - (CPU空闲时间片 / CPU时间片总和)。

CPU时间片总和 = user + nice + system + idle + iowait + irq + softirq

CPU 空闲时间片 = idle

需要注意的是,/proc/stat 文件中记录的时间都是自系统启动开始的累计时间,所以计算CPU的使用率需要依据一个时间间隔内的CPU时间片分布情况。

二、参考代码

只是参考,肯定跑不起来的,缺了一些头文件。

typedef struct cpu_info_
{long time_user;long time_nice;long time_system;long time_idle;long time_iowait;long time_irq;long time_sirq;
}cpu_info;cpu_info *cpu_info_snap()
{char cmd[CMD_LEN_GER] = "cat /proc/stat", cpu_info_tmp[CMD_LEN_RES] = "", str_tmp[10] = "";FILE *file = popen(cmd, "r");if (file == NULL){LOG_FATAL("[CPU]-->cmd(%s) execute failed\n", cmd);return NULL;}cpu_info *cpu_time = (cpu_info *)malloc(sizeof(cpu_info));fgets(cpu_info_tmp, CMD_LEN_RES, file);sscanf(cpu_info_tmp, "%s %ld %ld %ld %ld %ld %ld %ld", str_tmp, &cpu_time->time_user, &cpu_time->time_nice, &cpu_time->time_system, &cpu_time->time_idle, &cpu_time->time_iowait, &cpu_time->time_irq, &cpu_time->time_sirq);return cpu_time;
}long cpu_time_total(cpu_info *info)
{if (info == NULL){return ERROR;}return info->time_user + info->time_nice + info->time_system + info->time_idle + info->time_iowait + info->time_irq + info->time_sirq;
}int cpu_gen_info(char *cpu_info_str, int len, char *err)
{cpu_info *cpu_time_pre = cpu_info_snap();usleep(100*1000);cpu_info *cpu_time_back = cpu_info_snap();long ct_total_pre = cpu_time_total(cpu_time_pre), ct_total_back = cpu_time_total(cpu_time_back);if (ct_total_pre < 0 || ct_total_back < 0 || ct_total_pre >= ct_total_back){LOG_ERROR("[CPU]->cpu time format error! pre(%ld)--back(%ld)\n", ct_total_pre, ct_total_back);return ERROR;}long ct_idle_pre = cpu_time_pre->time_idle, ct_idle_back = cpu_time_back->time_idle;if(ct_idle_back <= ct_idle_pre){LOG_ERROR("[CPU]->cpu idle time fotmat errot! pre(%ld)--back(%ld)\n", ct_idle_pre, ct_idle_back);return ERROR;}int rate = (1 - (ct_idle_back * 1.0 - ct_idle_pre * 1.0) / (ct_total_back * 1.0 - ct_total_pre * 1.0)) * 100;printf("%d \n", rate);free(cpu_time_pre);free(cpu_time_back);return OK;
}

有什么不足欢迎提出来。

linux系统下CPU利用率的计算相关推荐

  1. linux sleep cpu,Linux系统下CPU频率的调整

    ☆★省电or流畅★ ☆ root@android:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_governors hotp ...

  2. linux系统下cpu如何测试,Linux 系统下如何查看CPU个数

    该信息整理自网上,需要进一步学习和确认 cat /proc/cpuinfo 可以查看cpu个数 getconf LONG_BIT 查看是32位还是64位 例如: cat /proc/cpuinfo p ...

  3. linux系统下查看cpu功耗,Linux系统下查看CPU信息

    Linux系统下查看CPU信息 查看CPU信息(型号): # cat /proc/cpuinfo| grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon( ...

  4. linux的top命令cpu,在Linux系统下使用top命令查看CPU使用情况

    在Linux系统下,使用top命令查看CPU使用情况. %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ...

  5. linux 物理内存 分配,[linux物理内存分配]Linux系统下如何查看物理内存占用率

    你了解linux系统下如何查看物理内存占用率吗?跟着答.案.网 ZqNf.Com小编一起学习吧linux系统下如何查看物理内存占用率. linux系统下如何查看物理内存占用率方法 linux下看内存和 ...

  6. Linux系统下常见性能分析工具的使用

    在前面的文章中,我简单介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下 ...

  7. Linux系统的CPU使用率和Load

    为什么80%的码农都做不了架构师?>>>    好吧,我承认这个话题是老生常谈,我自己也在2009年刚接触性能测试时就已经开始关注并略知一二:然而,对于CPU使用率和系统负载Load ...

  8. linux系统查看CPU使用含义、IO、内存、硬盘使用、负载

    一.Linux系统查看CPU使用率命令 在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况.而监控CPU的性能一般包括以下3点:运行队列.CPU使用率和上下文切换. 对于每 ...

  9. linux 性能教程,Linux系统下常见性能分析工具的使用

    在前面的文章中,我简单介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下 ...

  10. linux系统下tar/gz/7z/xz/bz2/zip等各种格式的打包压缩解压

    linux系统下总会遇到各种格式的压缩包,什么tar/gz/7z/xz/bz2/zip等等,每种格式文件的解压和压缩方法都不完全一致,所携带的参数也都各有千秋,初学者往往会一脸茫然,不知如何是好.于是 ...

最新文章

  1. 435. 无重叠区间(贪心经典题+思路+详解)
  2. php curl跨域cookie_php使用curl带cookie访问一直失败求助
  3. Python排序 插入排序
  4. @param注解什么意思_Java反射是什么?看这篇绝对会了!
  5. c语言设计二级考试程序修改题,全国计算机c语言二级考试试题
  6. 数学建模之图论最短路径问题
  7. 支付宝沙箱版app登入失败账户不存在问题
  8. 电话销售技巧,电话销售需要注意哪些?
  9. ORA-12514: TNS:listener does not currently know of service requested in connect descript
  10. 中央财经大学创新创业中心主任尚超:大数据技术在防范虚假发票中的应用
  11. 简要描述如何安装配置apache的一个开源Hadoop
  12. 淘宝图片加载不出来案件
  13. #XDOJ 172 构造表达式
  14. chrome tv版_软件推荐TV版APP:影迷大院1.0TV纯净版
  15. 请给我一本防爆仓秘籍@中本葱
  16. 附录3:实验结果与简单分析
  17. Adobe After Effects CC 2018
  18. 计算机开机长鸣报警,电脑开机报警,教您电脑开机一直长鸣报警怎么办
  19. 相信未来 --- 食指
  20. Python基础知识(Python的简介、Python环境的安装、集成开发环境Pycharm的安装)

热门文章

  1. 三菱PLC安装报错“工程初始化失败”处理方法
  2. 2020洪灾地图_卫星地图看洪灾:“告急”的鄱阳湖发生了什么?
  3. 使用ffmpeg将ASS字幕打进视频流中
  4. python图像风格迁移_快速图像风格迁移
  5. 公差基本偏差代号_基本偏差代号公差等级代号.ppt
  6. 临时邮箱有什么用,推荐5个临时邮箱
  7. 计算机软件吸附效应,流体混合物吸附分离的分子模拟研究
  8. 直播电商源码,实现直播音视频的推流
  9. mysql如何导出数据脚本_MySQL 导出数据
  10. linux下搭建redis集群