Linux系统/proc/stat解析
一. 概述
1.1 CPU时间
cpu指标 | 含义 |
---|---|
user | 用户态时间 |
nice | 用户态时间(低优先级,nice>0) |
system | 内核态时间 |
idle | 空闲时间 |
iowait | I/O等待时间 |
irq | 硬中断 |
softirq | 软中断 |
iowait时间是不可靠值,理由如下:
- CPU不会等待I/O执行完成,而iowait是等待I/O完成的时间。 当CPU进入idle状态,很可能会调度另一个task执行,所以iowait计算时间偏小;
- 多核CPU,iowait的计算并非某一个核,因此计算每一个cpu的iowait非常困难;
相关资料:http://man7.org/linux/man-pages/man5/proc.5.html
二. proc/stat
proc/stat节点记录的是系统进程整体的统计信息
2.1 stat数据
[root@server02 ~]# cat /proc/stat cpu 10237 12 51114 5019419 4278 0 804 0 0 0 cpu0 10237 12 51114 5019419 4278 0 804 0 0 0 intr 3554236 99 10 0 0 0 0 0 0 1 0 0 0 16 0 0 50341 1 29907 62 464198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7361 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 5957784 btime 1620835408 processes 215631 procs_running 4 procs_blocked 0 softirq 3726801 1 2218541 10321 465901 53969 0 7416 0 0 970652
时间单位,sysconf(_SC_CLK_TCK)一般地定义为jiffies(一般地等于10ms)
2.2 说明
- intr:系统启动以来的所有interrupts的次数情况
- ctxt: 系统上下文切换次数
- btime:启动时长(单位:秒),从Epoch(即1970零时)开始到系统启动所经过的时长,每次启动会改变。
- 此处指为1500827856,转换北京时间为2017/7/24 0:37:36
processes
:系统启动后所创建过的进程数量。当短时间该值特别大,系统可能出现异常- procs_running:处于Runnable状态的进程个数
- procs_blocked:处于等待I/O完成的进程个数
[root@server02 ~]# cat /proc/uptime 51522.40 50300.55
- 第一个值代表从开机到现在的累积时间(单位为秒), 开机后运行51522.40秒
- 第二个值代表从开机到现在的CPU空闲时间,单位为秒
技巧
:结合btime获取当前的绝对时间,1500827856 + 82044 = 1500909900, 转换成北京时间2017/7/24 23:25:00,也就是当前执行命令cat /proc/uptime
的时间点。
三. proc/[pid]>/stat
proc/<pid style="box-sizing: border-box;">/stat用于获取某一个进程的统计信息,实现过程见fs/proc/array.c的do_task_stat()</pid>
3.1 stat数据
[root@server02 proc]# cat /proc/87638/stat 87638 (httpd) S 1 87638 87638 0 -1 1077944576 2254 0 41 0 2 20 0 0 20 0 1 0 5189418 229462016 1264 18446744073709551615 94081325047808 94081325544468 140730837104432 140730837103496 140567110646147 0 0 16781312 134235883 18446744071608561237 0 0 17 0 0 0 44 0 0 94081327642216 94081327658828 94081356742656 140730837110635 140730837110664 140730837110664 140730837110760 0
3.2 解释
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,此处等于166114 stime: 该进程处于内核态的时间,单位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
51522.40
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?