Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373633
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 356
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-01 14:18
文章分类

全部博文(163)

文章存档

2020年(4)

2019年(5)

2018年(4)

2017年(15)

2016年(11)

2015年(10)

2014年(4)

2013年(8)

2012年(13)

2011年(23)

2010年(2)

2009年(16)

2008年(20)

2007年(13)

2006年(12)

2005年(3)

分类: LINUX

2012-09-25 00:00:00

Linux 的/proc/stat文件包含很多信息,但是看起来有些杂乱,到底都是些什么内容呢,今天仔细研究一下,先看一下stat文件内容:

点击(此处)折叠或打开

  1. [root@localhost ~]# cat /proc/stat
  2. cpu 7543 0 6902 10332516 11903 2770 28485 0
  3. cpu0 7543 0 6902 10332516 11903 2770 28485 0
  4. intr 104942647 104103305 1274 0 3 3 0 5 0 3 0 0 0 2400 0 0 324441 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45657 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 465438 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  5. ctxt 1919702
  6. btime 1323717585
  7. processes 21449
  8. procs_running 1
  9. procs_blocked 0

/proc/stat 每列第一行表示项目内容,其后每列为对应的信息

点击(此处)折叠或打开

  1. cpu           - 整体 CPU 各项使用时间
  2. cpu0/cpu1...  - 个别 CPU 各项使用时间
  3. ctxt          - 显示系统经历过的 context switch 次数。
  4. btime         - 计算机开机的时间,以由 epoch (1970 年 1 月 1 日) 至开机时间的秒数表示。
  5. processes     - 开机后 fork 的次数
  6. procs_running - 在可运行 (runnable) 状态的进程数目,Linux 2.5.45 开始支持
  7. procs_blocked - 被阻截 (blocked) 直至输入/输出完成的进程数目,Linux 2.5.45 开始支持
CPU 各项时间 (cpu/cpu0/cpu1...)

点击(此处)折叠或打开

 显示 CPU 各项使用时间,单位为为 USER_HZ (大部份架构为百分之一秒),一般会有 4 至 8 个时间,分别代表:
  1. user   - CPU 花在用户模式的时间,即运行应用程序花费的时间
  2. nice   - CPU 花在 nice 值大于一般值 0 (即有较低优先级别) 进程的时间。
  3. system - CPU 花在系统模式即在内核空间 (kernel space) 的时间,即在运行内核工作的时间
  4. idle   - CPU 闲置的时间,其值一定为 /proc/uptime 中第二个项目乘 USER_HZ
  5. iowait - CPU 花在等候输入/输出的时间,Linux 2.5.41 开始才开始支援
  6. irq    - CPU 花在处理硬件中断 (hardware interrupt) 的时间,Linux 2.6.0-test4 开始支持
  7. softirq- CPU 花在处理 softirq 软件中断的时间,Linux 2.6.0-test4 开始支持
  8. steal_time  - 在虚拟环境下 CPU 花在处理其他作业系统的时间,Linux 2.6.11 开始支持
  9. guest  - 在 Linux 内核控制下 CPU 为 guest 作业系统运行虚拟 CPU 的时间,Linux 2.6.24 开始支持(本例中无此项)

基本要素搞清楚了,怎么计算CPU使用率呢?我们继续:

点击(此处)折叠或打开

  1. CPU总时间:total=user+nice+system+idle+iowait+softirq+steal_time+guest
  2. CPU繁忙时间:time=user+nice+system+iowait+softirq+steal_time+guest
  3. 间隔1秒钟2次获取CPU总时间:total1、total2
  4. 和CPU繁忙时间:time1、time2
  5. CPU使用率=(time2-time1)/(total2-total1)

计算方法有了,具体用什么语言实现呢?

点击(此处)折叠或打开

  1. 我们使用PHP的形式来在页面上对CPU使用率进行展现,以下是用到的代码:
  2. cat index.php
  3. $mode = "/(cpu)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)/";
  4. $string=shell_exec("more /proc/stat");
  5. preg_match_all($mode,$string,$arr);
  6. //print_r($arr);
  7. $total1=$arr[2][0]+$arr[3][0]+$arr[4][0]+$arr[5][0]+$arr[6][0]+$arr[7][0]+$arr[8][0]+$arr[9][0];
  8. $time1=$arr[2][0]+$arr[3][0]+$arr[4][0]+$arr[6][0]+$arr[7][0]+$arr[8][0]+$arr[9][0];

  9. sleep(1);
  10. $string=shell_exec("more /proc/stat");
  11. preg_match_all($mode,$string,$arr);
  12. $total2=$arr[2][0]+$arr[3][0]+$arr[4][0]+$arr[5][0]+$arr[6][0]+$arr[7][0]+$arr[8][0]+$arr[9][0];
  13. $time2=$arr[2][0]+$arr[3][0]+$arr[4][0]+$arr[6][0]+$arr[7][0]+$arr[8][0]+$arr[9][0];
  14. $time=$time2-$time1;
  15. $total=$total2-$total1;
  16. //echo "CPU amount is: ".$num;
  17. $percent=bcdiv($time,$total,3);
  18. $percent=$percent*100;
  19. echo "CPU Usage is: ".$percent."%";
  20. ?>
实现效果


继续实现针对内存的监控

点击(此处)折叠或打开

  1. $str=shell_exec("more /proc/meminfo");
  2. $mode="/(.+):\s*([0-9]+)/";
  3. preg_match_all($mode,$str,$arr);
  4. $pr=bcdiv($arr[2][1],$arr[2][0],3);
  5. $pr=1-$pr;
  6. $pr=$pr*100;
  7. echo $pr."%";
看看效果



参考
                             
阅读(9194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~