Linux下可以非常方便的读取系统、进程、以及线程的运行状态和信息。

在/proc下面,可以读取系统的运行参数

比如:

cpuinfo 获取服务器的cpu信息

meminfo 获取内存的使用情况

stat 获取cpu的活动情况,累计cpu从系统启动到现在的时长,单位都是1/100秒

statm 获取内存的活动情况

在/proc/<pid>下面,可以读取pid为<pid>的进程信息,

比如:

stat 获取cpu的占用时间,累计进程占用cpu的时长,单位是1/100秒

statm获取内存的占用空间大小

在/proc/<pid>/task/<tid>下面是读取tid为<tid>的线程信息

比如:

stat,statm等,与进程中文件结构相同

 

计算某个进程cpu和内存使用率

内存使用率计算:

总内存量:totalmem = meminfo中获取内存的总量MemTotal对应的值

进程实际占用内存大小:processmem = <pid>/status文件中获取VmRSS对应的值

Ps: (实际也可以在<pid>/statm中获取,但里面是页数,要乘以每页的大小字节数,一般4k)

内存使用率:pmem = processmem/totalmem * 100%;

cpu使用率计算:

cpu总的使用时长: totalcpu1 = stat文件第一行数字总和,里面是各种时间,user + nice + system + idle + iowait + irq + softirq + stealstolen + guest

进程使用cpu时长:processcpu1 = 读取<pid>/stat文件,按照空格区分,第14位到17位数字,分别表示为utime,stime,cutime,cstime,时长为utime+stime

ps:(有些文章写需要四个时间加和,但我测试后结果和top,ps不一致,后看top源文件,发现并没有使用cutime,cstime,因此去掉)

隔一段时间后,在同样方法取一次,标记为totalcpu2,processcpu2

ps:(间隔时间不能过短,因为文件中记录的时间单位为1/100秒,即至少要大于10毫秒才有意义)

cpu核数:cpunum = /proc/stat中,可以根据cpu[0-9]计算cpu核数

cpu使用率:pcpu = (processcpu2-processcpu1)/(totalcpu2-totalcpu1)*cpunum*100%

发表评论

邮箱地址不会被公开。 必填项已用*标注