/proc/stat解析


一. 概述

1. CPU時間

cpu指標 含義
user 用戶態時間
nice 用戶態時間(低優先級,nice>0)
system 內核態時間
idle 空閑時間
iowait I/O等待時間
irq 硬中斷
softirq 軟中斷


iowait時間是不可靠值,理由如下:

(1)CPU不會等待I/O執行完成,而iowait是等待I/O完成的時間。 當CPU進入idle狀態,很可能會調度另一個task執行,所以iowait計算時間偏小;
(2)多核CPU,iowait的計算並非某一個核,因此計算每一個cpu的iowait非常困難;

相關資料:http://man7.org/linux/man-pages/man5/proc.5.html

 

二. proc/stat

proc/stat節點記錄的是系統進程整體的統計信息

1. stat數據

$ adb shell cat /proc/stat
//CPU指標:user,nice, system, idle, iowait, irq, softirq
cpu  130216 19944 162525 1491240 3784 24749 17773 0 0 0
cpu0 40321 11452 49784 403099 2615 6076 6748 0 0 0
cpu1 26585 2425 36639 151166 404 2533 3541 0 0 0
cpu2 22555 2957 31482 152460 330 2236 2473 0 0 0
cpu3 15232 1243 20945 153740 303 1985 3432 0 0 0
cpu4 5903 595 6017 157410 30 10959 605 0 0 0
cpu5 4716 380 3794 157909 23 118 181 0 0 0
cpu6 8001 515 8995 157571 48 571 180 0 0 0
cpu7 6903 377 4869 157885 31 271 613 0 0 0

intr ...
ctxt 22523049
btime 1500827856
processes 23231
procs_running 1
procs_blocked 0
softirq 3552900 843593 733695 19691 93143 468832 12783 257382 610426 0 513355

時間單位,sysconf(_SC_CLK_TCK)一般地定義為jiffies(一般地等於10ms)。

2. 說明

intr:系統啟動以來的所有interrupts的次數情況。
ctxt: 系統上下文切換次數。
btime:啟動時長(單位:秒),從Epoch(即1970零時)開始到系統啟動所經過的時長,每次啟動會改變。
此處指為1500827856,轉換北京時間為2017/7/24 0:37:36。
processes:系統啟動后所創建過的進程數量。當短時間該值特別大,系統可能出現異常。
procs_running:處於Runnable狀態的進程個數。
procs_blocked:處於等待I/O完成的進程個數。

另外:

cat /proc/uptime
82044.14 215440.94

第一個值代表從開機到現在的累積時間(單位為秒), 開機后運行82044秒。
第二個值代表從開機到現在的CPU空閑時間,單位為秒。

技巧:結合btime獲取當前的絕對時間,1500827856 + 82044 = 1500909900, 轉換成北京時間2017/7/24 23:25:00,也就是當前執行命令cat /proc/uptime的時間點。

 

三、proc/pid/stat

proc/pid/stat用於獲取某一個進程的統計信息,實現過程見fs/proc/array.c的do_task_stat()

1. stat數據

$ adb shell cat /proc/8385/stat
1557 (system_server) S 823 823 0 0 -1 1077952832 //1~9
2085481 15248 2003 27 166114 129684 26 30  //10~17
10 -10 221 0 2284 2790821888 93087 18446744073709551615 //18~25
1 1 0 0 0 0 6660 0 36088 0 0 0 17 3 0 0 0 0 0 0 0 0 0 0 0 0 0

2. 解釋

1 pid: 進程ID.
2 comm: task_struct結構體的進程名
3 state: 進程狀態, 此處為S
4 ppid: 父進程ID (父進程是指通過fork方式,通過clone並非父進程)
5 pgrp:進程組ID
6 session:進程會話組ID
7 tty_nr:當前進程的tty終點設備號
8 tpgid:控制進程終端的前台進程號
9 flags:進程標識位,定義在include/linux/sched.h中的PF_*, 此處等於1077952832
10 minflt: 次要缺頁中斷的次數,即無需從磁盤加載內存頁. 比如COW和匿名頁
11 cminflt:當前進程等待子進程的minflt
12 majflt:主要缺頁中斷的次數,需要從磁盤加載內存頁. 比如map文件
13 majflt:當前進程等待子進程的majflt
14 utime: 該進程處於用戶態的時間,單位jiffies,此處等於166114
15 stime: 該進程處於內核態的時間,單位jiffies,此處等於129684
16 cutime:當前進程等待子進程的utime
17 cstime: 當前進程等待子進程的utime
18 priority: 進程優先級, 此次等於10.
19 nice: nice值,取值范圍[19, -20],此處等於-10
20 num_threads: 線程個數, 此處等於221
21 itrealvalue: 該字段已廢棄,恆等於0
22 starttime:自系統啟動后的進程創建時間,單位jiffies,此處等於2284
23 vsize:進程的虛擬內存大小,單位為bytes
24 rss: 進程獨占內存+共享庫,單位pages,此處等於93087
25 rsslim: rss大小上限

3. 說明:

第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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM