您的位置:首页 > 运维架构 > Linux

Linux proc文件系统杂记

2016-06-02 18:19 519 查看
一、cpu占用率相关

1. 系统总体cpu占用

/proc/stat

示例输出:

[root@test]# cat /proc/stat
cpu 166709 34158 278899 243448347 302989 0 345 0 0 0
cpu0 84510 17883 137112 121703575 152650 0 304 0 0 0
cpu1 82199 16274 141787 121744771 150338 0 41 0 0 0
intr 75906613 128 3 0 0 1145 0 3 0 1 0 0 0 5 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10721640 10872206 50816463 1 969791 20 519 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 61301504
btime 1463641857
processes 2841411
procs_running 1
procs_blocked 0
softirq 71894122 0 9598905 245185 50867002 970583 0 1 4522038 39180 5651228

具体函义,可以查看内核源码。下面是从top命令的源码top.c中摘出的一点代码。也可以看出一些函义。

file = fopen("/proc/stat", "r");
fscanf(file, "cpu %lu %lu %lu %lu %lu %lu %lu", &new_cpu.utime, &new_cpu.ntime, &new_cpu.stime,
&new_cpu.itime, &new_cpu.iowtime, &new_cpu.irqtime, &new_cpu.sirqtime);

2. 每个进程的cpu占用
/proc/pid/stat

示例输出

[root@test]# cat /proc/12/stat
12 (rcuos/0) S 2 0 0 0 -1 2129984 0 0 0 0 0 3161 0 0 20 0 1 0 2 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744071579888989 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0

下面是从top命令的源码top.c中摘出的一点代码。也可以看出一些函义。
/* Split at first '(' and last ')' to get process name. */
open_paren = strchr(buf, '(');
close_paren = strrchr(buf, ')');
if (!open_paren || !close_paren) return 1;

*open_paren = *close_paren = '\0';
strncpy(proc->tname, open_paren + 1, THREAD_NAME_LEN);
proc->tname[THREAD_NAME_LEN-1] = 0;

/* Scan rest of string. */
sscanf(close_paren + 1, " %c %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d "
"%lu %lu %*d %*d %*d %*d %*d %*d %*d %lu %ld",
&proc->state, &proc->utime, &proc->stime, &proc->vss, &proc->rss);

3. 每个线程的cpu占用

/proc/pid/task/tid/stat

示例输出

[root@test]# cat /proc/12/task/12/stat
12 (rcuos/0) S 2 0 0 0 -1 2129984 0 0 0 0 0 3161 0 0 20 0 1 0 2 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744071579888989 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0

其格式与/proc/pid/stat格式相同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: