嵌入式Linux环境下线程CPU消耗跟踪

8 篇文章 0 订阅
2 篇文章 0 订阅

在比较大型的项目中,通常都会使用多线程技术,而且通常是多人合作开发,各方自测OK之后,整合在一起往往会出现一些问题,CPU使用率过高就是其中之一。如何在不熟悉所有模块代码的情况下,快速的定位到具体哪一个线程在消耗CPU,显得很有必要。在X86上,可以借助一些工具进行定位分析,但是在嵌入式系统中,工具就比较匮乏,各命令功能也比较简单,就不好定位。现介绍一种简单通用的办法:

第一步:

获取各个线程的tid,Linux环境下的线程其实就是轻量级的进程,只不过通过top\ps等常用命令一般都查不到具体的线程号tid(指在嵌入式系统中),需要在各个线程实现代码中获取线程ID。

#include <sys/syscall.h> 

pid_t gettid()
{
     return syscall(SYS_gettid);   
}
参考自: Linux打印真实pid的方法 http://blog.csdn.net/gaoxuelin/article/details/9718189


第二步:

通过线程ID获得各线程的CPU使用率。

主要是通过分析/proc/<pid>/task/<tid>/stat文件获得,pid为程序的PID,tid为程序的各个线程的ID号(就是第一步输出的线程ID),stat文件就是一些调度的基本信息,具体可参阅:Linux proc/pid/task/tid/stat文件详解 http://blog.csdn.net/ctthuangcheng/article/details/18090701

线程比较多的时候一个线程一个线程去分析该文件比较费劲,可通过脚本一次解析完成,参数为进程PID,运行成功会输出该进程的所有线程tid、用户层CPU使用、内核态CPU使用,数值越高表示消耗CPU资源越多。

#!/bin/sh
#get /proc/pid/task/tid/stat
#$1 is tid
#$14  is user cpu 
#$15 is sys cpu
echo "tid user sys"
for file in /proc/$1/task/*
do
    if test -d $file
    then
        cat $file/stat | awk -F" " '{print $1 " " $14 " " $15}'
    fi
done



  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值