linux 系统下proc 中stat 文件的说明

 

   在Linux系统中,可以用/proc/stat文件来计算cpu的利用率。这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

cat /proc/stat
cpu 65376847 362756 2405159 10834971593 3765180 93399 2395097 0
cpu0 7680302 5263 111909 1355640955 47680 0 185343 0
cpu1 6527638 2261 327795 1356540189 249151 1 24242 0
cpu2 6239465 47114 200809 1354709532 2153662 3610 317002 0
cpu3 7009912 36126 257576 1356116663 162851 1068 87068 0
cpu4 6028713 1692 197911 1356919175 300788 6821 216076 0
cpu5 7110575 1479 124474 1356297947 92620 4248 39901 0
cpu6 7206763 241427 247384 1355030525 691206 11642 242214 0
cpu7 17573475 27390 937298 1343716603 67218 66006 1283248 0
intr 2466653411 753885765 3 0 4 4 0 0 0 1 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 148466005 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1553671397 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10630155 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0
ctxt 2905526438
btime 1260187150
processes 4266007
procs_running 5
procs_blocked 0

 

输出解释
CPU 以及CPU0、CPU1、CPU2、CPU3、CPU4、CPU5、CPU6、每行的每个参数意思(以第一行为例)为:

参数 解释
user (65376847) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice (362756) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
system (2405159) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle (10834971593) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait (3765180) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq (93399) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq (2395097) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

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

“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。

 

那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100


[root@localhost ~]# cat /proc/6873/stat

  6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0 [root@localhost ~]#

  每个参数意思为:

  参数 解释

  pid=6873 进程(包括轻量级进程,即线程)号

  comm=a.out 应用程序或命令的名字

  task_state=R 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead

  ppid=6723 父进程ID

  pgid=6873 线程组号

  sid=6723 c该任务所在的会话组ID

  tty_nr=34819(pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号

  tty_pgrp=6873 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。

  task->flags=8388608 进程标志位,查看该任务的特性www.linuxidc.com

  min_flt=77 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数

  cmin_flt=0 累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目

  maj_flt=0 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数

  cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目

  utime=1587 该任务在用户态运行的时间,单位为jiffies

  stime=1 该任务在核心态运行的时间,单位为jiffies

  cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies

  cstime=0 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies

  priority=25 任务的动态优先级

  nice=0 任务的静态优先级

  num_threads=3 该任务所在的线程组里线程的个数

  it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.

  start_time=5882654 该任务启动的时间,单位为jiffies

  vsize=1409024(page) 该任务的虚拟地址空间大小

  rss=56(page) 该任务当前驻留物理地址空间的大小

  Number of pages the process has in real memory,minu 3 for administrative purpose.

  这些页可能用于代码,数据和栈。

  rlim=4294967295(bytes) 该任务能驻留物理地址空间的最大值

  start_code=134512640 该任务在虚拟地址空间的代码段的起始地址

  end_code=134513720 该任务在虚拟地址空间的代码段的结束地址

  start_stack=3215579040 该任务在虚拟地址空间的栈的结束地址

  kstkesp=0 esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.

  kstkeip=2097798 指向将要执行的指令的指针, EIP(32 位指令指针)的当前值.

  pendingsig=0 待处理信号的位图,记录发送给进程的普通信号

  block_sig=0 阻塞信号的位图

  sigign=0 忽略的信号的位图

  sigcatch=082985 被俘获的信号的位图

  wchan=0 如果该进程是睡眠状态,该值给出调度的调用点

  nswap 被swapped的页数,当前没用

  cnswap 所有子进程被swapped的页数的和,当前没用

  exit_signal=17 该进程结束时,向父进程所发送的信号

  task_cpu(task)=0 运行在哪个CPU上

  task_rt_priority=0 实时进程的相对优先级别

  task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程

posted @ 2013-03-19 21:45  only_eVonne  阅读(1649)  评论(0编辑  收藏  举报