最近项目进行中,发现系统不稳定,CPU使用率过高就是其中问题之一。
在PC上,可以借助一些工具进行定位分析,但是在嵌入式系统中,工具就比较匮乏,各命令功能也比较简单,就不好定位,所以只能自己来应对了。
1、获取各个线程的tid,Linux环境下的线程其实就是轻量级的进程,只不过通过top\ps等常用命令一般都查不到具体的线程号tid(指在嵌入式系统中),需要在各个线程实现代码中获取线程ID,具体接口为syscall(SYS_gettid);
2、通过线程ID获得各线程的CPU使用率。主要是通过分析/proc/<pid>/task/<tid>/stat文件获得,pid为程序的PID,tid为程序的各个线程的ID号(就是第一步输出的线程ID),stat文件就是一些调度的基本信息,具体参数意思可以参考网上其他博客;线程比较多的时候一个线程一个线程去分析该文件比较费劲,可通过脚本一次解析完成,参数为进程PID,运行成功会输出该进程的所有线程tid、用户层CPU使用、内核态CPU使用,数值越高表示消耗CPU资源越多,脚本如下:
#!/bin/sh
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
调试OK,下一步就是用代码去实现,然后嵌入到系统代码中了。
网友评论