准确计算linux内存使用率,linux下计算进程cpu使用率和内存使用率的方法

在实际工做当中,有时候须要计算某个进程的cpu使用率或者是内存使用率。linux

下面将介绍一种linux中计算某个指定进程的cpu使用率和内存使用率的方法。spa

在正式开始以前,先对要使用到的文件和命令进行一下说明。进程

0. /proc/uptime内存

该文件中储存了两个数字,第一个数值表明系统总的启动时间,第二个数值则表明系统空闲的时间,单位都是秒。it

例如,在个人工做机器上执行结果以下:变量

$ cat   /proc/uptime

5711847.49   3339234.87

$搜索

1. /proc/[pid]/stat程序

包含了全部CPU活跃的信息,该文件中的全部值都是从系统启动开始累计到当前时刻。方法

在此只介绍几个和本文相关的参数,其余参数就不一一介绍了,相关介绍网上有不少,请你们自行搜索。im

utime:该进程在用户态运行的时间,单位为jiffiesstime:该进程在核心态运行的时间,单位为jiffies

start_time:该进程启动的时间,单位为jiffies

rss:该进程当前驻留物理地址空间的大小,单位是page

例如,在个人工做机器上执行结果以下:

$ cat /proc/1/stat

1 (init) S 0 1 1 0 -1 4202752 2349 1719861150 8 23067 20 3681 34030168 1016826 20 0 1 0 1 2969600 328 4294967295 1 1 0 0 0 0 0 4096 536962595 4294967295 0 0 0 5 0 0 28 0 0

$

2. jiffies

上述描述中,对于时间的计算,用了两种计量单位:秒和jiffies。

对于秒,你们确定都不陌生,可是jiffies就未必了。jiffies是一个全局变量,用来记录自系统启动以来产生的节拍的总数。

启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增长该变量的值。

一秒内时钟中断的次数等于Hz,因此jiffies一秒内增长的值也就是Hz。

总结起来,jiffies与秒的运算关系为:

second = jiffies / Hz

3. /proc/meminfo

获取系统内存的详细信息。例如,在个人工做机器上执行结果以下:

$ cat /proc/meminfo

MemTotal:        8131024 kB

MemFree:         6895932 kB

Buffers:          502416 kB

Cached:           307764 kB

SwapCached:         4132 kB

...

$

下面言归正传,讲述如何在代码中计算某个进程的cpu使用率和内存使用率

1. 计算指定进程的cpu使用率

①.计算系统的运行时间

cat /proc/uptime,获得系统运行的总时间up_time

②. 计算process的运行时间

cat /proc/[pid]/stat,获得进程运行的总时间total_time和进程的启动时间start_time。

其中,total_time = stime + utime

③.获取系统时钟频率

hz = sysconf(_SC_CLK_TCK);

④.计算cpu使用率

seconds = up - (start_time / hz);//从进程启动到当前的时间,单位为秒

pcpu = (((total_time * 1000ULL) / hz) / seconds);

2. 计算指定进程的内存使用率

①. 获取系统的memsize

cat /proc/meminfo

②.获取进程的page数

cat /proc/[pid]/stat

③.获取系统的page size(单位是Byte)

sysconf(_SC_PAGE_SIZE)

④.计算内存使用率

rss = page_cnt * page_size / 1024;

pmem = (rss * 1000UL) / memsize;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值