docker容器监控宿主机的内存及cpu占用
先将宿主机的目录/proc目录挂载到容器中
1.CPU占用获取
解析/proc/stat文件
1root@wenbo:~# cat /proc/stat
2cpu 74 0 51 11109 6 0 36 0 0 0
3cpu0 7 0 11 1380 1 0 18 0 0 0
4cpu1 1 0 0 1403 1 0 14 0 0 0
5cpu2 20 0 9 1371 0 0 4 0 0 0
6cpu3 32 0 5 1369 1 0 0 0 0 0
7cpu4 1 0 3 1395 0 0 0 0 0 0
8cpu5 1 0 13 1395 0 0 0 0 0 0
9cpu6 11 0 10 1387 0 0 0 0 0 0
10cpu7 1 0 0 1405 0 0 0 0 0 0
11intr 5285 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12ctxt 11774
13btime 1630895617
14processes 350
15procs_running 1
16procs_blocked 0
17softirq 6025 0 417 0 59 0 0 2695 1434 0 1420
cpu0-cpu7代表每个核的使用情况,第一行的cpu是总的使用情况,所以我们监控只需要用到第一行的数据
参考网上查找的信息,8列分别为:
列名 | 说明 |
---|---|
user | 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。 |
nice | 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间 |
system | 从系统启动开始累计到当前时刻,处于核心态的运行时间 |
idle | 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间 |
iowait | IO等待时间 |
irq | 从系统启动开始累计到当前时刻,硬中断时间 |
softirq | 从系统启动开始累计到当前时刻,软中断时间 |
stealstolen | 虚拟化环境中运行时在其他操作系统中花费的时间 |
计算占用率的公式是取相隔时间较短的两组变量c1和c2
c1的8列相加为total1
c2的8列相加为total2
total=total2-total1
c1的idle为idle1
c2的idle为idle2
idle=idle2-idle1
CPU占用率百分比计算:(total - idle) / total * 100
2.内存占用获取
解析/proc/meminfo文件
1root@wenbo:~# cat /proc/meminfo
2MemTotal: 2029436 kB
3MemFree: 78232 kB
4MemAvailable: 647692 kB
5Buffers: 21228 kB
6Cached: 655656 kB
7SwapCached: 0 kB
8Active: 183384 kB
9Inactive: 1635580 kB
10Active(anon): 268 kB
11Inactive(anon): 1133696 kB
12Active(file): 183116 kB
13Inactive(file): 501884 kB
14Unevictable: 0 kB
15Mlocked: 0 kB
16SwapTotal: 1048576 kB
17SwapFree: 1048576 kB
18Dirty: 16 kB
19Writeback: 0 kB
20AnonPages: 1140128 kB
21Mapped: 153172 kB
22Shmem: 280 kB
23KReclaimable: 32392 kB
24Slab: 63528 kB
25SReclaimable: 32392 kB
26SUnreclaim: 31136 kB
27KernelStack: 8288 kB
28PageTables: 5692 kB
29NFS_Unstable: 0 kB
30Bounce: 0 kB
31WritebackTmp: 0 kB
32CommitLimit: 2063292 kB
33Committed_AS: 3292456 kB
34VmallocTotal: 34359738367 kB
35VmallocUsed: 28088 kB
36VmallocChunk: 0 kB
37Percpu: 2496 kB
38AnonHugePages: 866304 kB
39ShmemHugePages: 0 kB
40ShmemPmdMapped: 0 kB
41FileHugePages: 0 kB
42FilePmdMapped: 0 kB
43HugePages_Total: 0
44HugePages_Free: 0
45HugePages_Rsvd: 0
46HugePages_Surp: 0
47Hugepagesize: 2048 kB
48Hugetlb: 0 kB
49DirectMap4k: 27648 kB
50DirectMap2M: 2068480 kB
51DirectMap1G: 2097152 kB
内存占用率百分比计算:(MemTotal - MemFree - Buffers - Cached - SReclaimable - Shmem) / MemTotal * 100
作者:wenbo
中秋快乐
感谢博主的分享