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

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

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

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

0. /proc/uptime

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

例如,在我的工作机器上执行结果如下:

$ cat   /proc/uptime
5711847.49   3339234.87
$

1. /proc/[pid]/stat

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

在此只介绍几个和本文相关的参数,其他参数就不一一介绍了,相关介绍网上有很多,请大家自行搜索。

utime:该进程在用户态运行的时间,单位为jiffies
stime:该进程在核心态运行的时间,单位为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;

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值