Linux获取进程处理器及内存占用等信息

Linux获取进程处理器及内存占用等信息

本文参考proc(5) 2021年08月27日版。

获取处理器(CPU)信息

/proc/stat 记录系统启动以来CPU在不同状态下消耗的时间之和,单位是用户时钟频率(USER_HZ)。具体数值与 sysconf(_SC_CLK_TCK) 成反比,一般为1/100,即1毫秒。
我们只关注系统(以cpu开头行)在各种状态下消耗的时间。
cpu user nice system idle iowait irq softirq steal guest guest_nice
cpu总的时间即该行所有数值的总和。

cpuTime = user + nice + system + idle + iowait + irq + softirq + steal + guest + guest_nice;

获取系统内存信息

/proc/meminfo 记录系统内存信息。
其中MemTotal表示系统可用物理内存大小。这个值通常会小于实际物理内存大小。

系统运行时间

/proc/uptime 记录系统运行时间。
此文件记录系统运行时间(含睡眠时间)及待机时间,单位是秒,精度是1厘秒。

获取进程信息

/proc/[pid]/stat 记录进程状态信息。

1 2 3 4 5 6 7 8 9 10 11 12 13
pid comm state ppid pgrp session tty_nr tpgid flags minflt cminflt majflt cmajflt
utime stime cutime cstime priority nice num_threads itrealvalue starttime vsize rss rsslim startcode
endcode startstack kstkesp kstkeip signal blocked sigignore sigcatch wchan nswap cnswap exit_signal processor
rt_priority policy delayacct_blkio_ticks guest_time cguest_time start_data end_data start_brk arg_start arg_end env_start env_end exit_code

这是当前记录在该文件里面的52条信息,其中本文需要关注的是 utimestimecutimecstime,也就是第14、15、16、17的值。

scheduledTime = utime + stime + cutime + sctime;

starttime (第22条)表示进程启动时间,单位是厘秒。

/proc/[pid]/statm 记录进程内存信息。单位是页,需要转换成具体大小。也可通过 /proc/[pid]/status 获取。
size resident shared text lib data dt
resident指进程实际占用的物理内存,shared为共享内存,size则是进程可寻址的内存空间大小。在计算内存占用的时候Gnome的系统监视器显示的内存大小为 resident - shared

处理器占用率

计算进程的处理器占用率需要每隔一段时间对处理器和进程信息进行采样,计算它们的差值,相除,即为这段时间内处理器的平均占用率。

if (lastCpuTime && lastScheduledTime)
    cpuUsage = (scheduledTime - lastScheduledTime) * 100. / (cpuTime - lastCpuTime);
lastScheduledTime = scheduledTime;
lastCpuTime = cpuTime;

内存占用率

如果不考虑共享内存,则直接将总的可用物理内存与进程实际占用的物理内存相除,即可得出当前进程的内存占用率。

memoryUsage = resident * 100. / memTotal;

进程运行时间

使用系统的运行时间(uptime)与进程启动时间(starttime)相减,即可得到进程运行时间。计算前需将单位统一。

uptime = systemUptime * 1000 - starttime * 10;

联系方式

QQ群:236510798

版权声明

严禁转载至CSDN

posted @ 2022-12-16 14:15  俨思  阅读(440)  评论(0编辑  收藏  举报