linux 中/proc/stat 解析
1. CPU时间
时间单位为:jiffies
cpu指标 | 含义 |
---|---|
user | 用户态时间,一般/高优先级,仅统计 nice <= 0 |
nice | 用户态时间(低优先级,nice>0) |
system | 内核态时间 |
idle | 空闲时间,不包含 IO 等待时间 |
iowait | I/O等待时间,磁盘 IO 等待时间 |
irq | 硬中断 |
softirq | 软中断 |
steal | 被盗时间,虚拟化环境中运行其他操作系统上花费的时间(since Linux 2.6.11) |
guest | 来宾时间,操作系统运行虚拟 cpu 花费的时间(since Linux 2.6.24) |
guest_nice | nice 来宾时间,运行一个带 nice 值的 guest 花费的时间(since linux 2.6.33) |
常见的 1 jiffies = 0.01s = 10ms
Man 手册中 iowait 有单独说明, iowait 时间是不可靠值,理由如下:
- CPU不会等待I/O执行完成,而iowait是等待I/O完成的时间。 当CPU进入idle状态,很可能会调度另一个task执行,所以iowait计算时间偏小;
- 多核CPU,iowait的计算并非某一个核,因此计算每一个 cpu 的 iowait 非常困难;
2. /proc/stat
proc/stat节点记录的是系统进程整体的统计信息
1 | cpu 569277041 161 1239423941 13792698342 4421519 63 261061 0 0 0 |
- intr:系统启动以来的所有 interrupts 的次数情况
- ctxt:系统上下文切换次数
- btime:启动时长( 单位:秒 ),也就是系统启动的时间
- process:系统启动后创建过的进程数量。当短时间该值特别大,系统可能出现异常
- procs_running:处于 Runnable 状态的进程个数
- procs_blocked:处于等待 I/O 完成的进程个数
1 | cat /proc/uptime |
- 第一个值代表从开机到现在的累积时间(单位为秒), 开机后运行82044秒
- 第二个值代表从开机到现在的CPU空闲时间,单位为秒
3. /proc/[pid]/stat
/proc/[pid]/stat 用于获取某一个进程的统计信息
1 | 8229 (monitor_agent) R 1 8228 8228 0 -1 4202560 1455535378942 0 0 0 411556780 939600865 0 0 20 0 1 0 620250541 32653312 655 18446744073709551615 134512640 134741549 4294169792 4294169300 4151465013 0 0 288428039 18944 0 0 0 17 2 0 0 3521 0 0 134742016 134743284 168185856 4294174356 4294174399 4294174399 4294176744 0 |
pid
: 进程ID.comm
: task_struct结构体的进程名state
: 进程状态, 此处为S- ppid: 父进程ID (父进程是指通过fork方式,通过clone并非父进程)
- pgrp:进程组ID
- session:进程会话组ID
- tty_nr:当前进程的tty终点设备号
- tpgid:控制进程终端的前台进程号
- flags:进程标识位,定义在include/linux/sched.h中的PF_*, 此处等于1077952832
- minflt: 次要缺页中断的次数,即无需从磁盘加载内存页. 比如COW和匿名页
- cminflt:当前进程等待子进程的minflt
- majflt:主要缺页中断的次数,需要从磁盘加载内存页. 比如map文件
- majflt:当前进程等待子进程的majflt
utime
: 该进程处于用户态的时间,单位jiffies,此处等于166114stime
: 该进程处于内核态的时间,单位jiffies,此处等于129684- cutime:当前进程等待子进程的utime
- cstime: 当前进程等待子进程的utime
- priority: 进程优先级, 此次等于10.
nice
: nice值,取值范围[19, -20],此处等于-10- num_threads: 线程个数, 此处等于221
- itrealvalue: 该字段已废弃,恒等于0
starttime
:自系统启动后的进程创建时间,单位jiffies,此处等于2284- vsize:进程的虚拟内存大小,单位为bytes
rss
: 进程独占内存+共享库,单位pages,此处等于93087- rsslim: rss大小上限
第10~17行主要是随着时间而改变的量;
内核时间单位,sysconf(_SC_CLK_TCK)一般地定义为jiffies(一般地等于10ms)
starttime: 此值单位为jiffies, 结合/proc/stat的 btime,可知道每一个线程启动的时间点
- 1500827856 + 2284/100 = 1500827856, 转换成北京时间为2017/7/24 0:37:58
第四行数据很少使用,只说一下该行第7至9个数的含义:
- signal:即将要处理的信号,十进制,此处等于6660
- blocked:阻塞的信号,十进制
- sigignore:被忽略的信号,十进制,此处等于36088