如何基于OpenTelemetry采集的user time等值计算进程CPU使用率?
基于OpenTelemetry processscraper指标计算特定进程CPU使用率
要计算进程的CPU使用率,不能直接用单次采集的user time/system time/wait time值——这些是进程启动以来的累计时间值,必须通过两次连续采集的差值来计算,具体步骤如下:
获取采集间隔与两次指标值
记录两次采集的时间戳,计算时间间隔interval(单位:秒);同时获取对应两次的指标值:- 第一次采集:
user_time_prev、system_time_prev - 第二次采集:
user_time_curr、system_time_curr
- 第一次采集:
计算CPU时间差值
进程实际占用CPU的时间是用户态与内核态时间之和,等待IO的wait time不占用CPU,不计入计算:delta_user = user_time_curr - user_time_prev delta_system = system_time_curr - system_time_prev delta_cpu_total = delta_user + delta_system计算CPU使用率
- 相对于单核心的使用率(上限为100%,若进程占用多核心,数值会超过100%):
cpu_usage_single_core = (delta_cpu_total / interval) * 100 - 相对于系统总CPU资源的使用率(上限为100%,需提前获取系统CPU核心数
cpu_core_count):cpu_usage_total = (delta_cpu_total / (interval * cpu_core_count)) * 100
- 相对于单核心的使用率(上限为100%,若进程占用多核心,数值会超过100%):
举例:假设采集间隔为10秒,两次采集的user time分别为0.05和0.15,system time分别为0.01和0.03,那么:
delta_user=0.10,delta_system=0.02,delta_cpu_total=0.12
单核心使用率:(0.12/10)100=1.2%
若系统为4核心,总CPU使用率:(0.12/(104))*100=0.3%
内容的提问来源于stack exchange,提问作者Keval Bhogayata
相关产品推荐
相关产品推荐

