赞
踩
一、使用场景
Android运行一段世时间后,系统出现卡顿
二、分析&定位问题
系统卡顿,同时又发现芯片温度很高,怀疑是温度过高导致CPU降频,因此我们要将一段时间内CPU的运行信息打印出来。这里我们想知道CPU温度与运行频率之间的关系,所以需要输出CPU的温度和频率参数,其次还一些辅助信息,例如时间和GPU的占用率。所以需要的数据项包括:时间、CPU温度、CPU频率、GPU占用率。为了获取一段时间内的数据,我们需要编写脚本间隔1s输出一组数据,建议观察5min左右。
1.编写shell脚本,新建文件cpu_util.sh,拷贝下面的文本保存到文件中
- # Des : 间隔1s输出CPU/GPU运行信息
- # Ver : V1.0
- # usage:
- # adb root
- # adb remount
- # adb push cpu_util.sh /system/bin/
- # adb shell
- # ./system/bin/cpu_util.sh
-
- printf " time cpu_temp cpu0~3[max-min]<cur_HZ> cpu4~7[max-min]<cur_HZ> gpu_rate \n"
- while true
- do
- #temp of CPU
- cpu_temp_t=$(cat /sys/class/thermal/thermal_zone1/temp)
- cpu_temp=$(awk 'BEGIN{printf "%.1f\n",('$cpu_temp_t'/'1000')}')
-
- #rate of GPU
- gpu_idle=$(cat /sys/module/ged/parameters/gpu_idle)
- gpu_rate=$((100-${gpu_idle}))
-
- printf "%s %0.1f [%7d-%7d]<%7d> [%7d-%7d]<%7d> %3s %3s \n" \
- $(date "+%Y-%m-%d-%H:%M:%S") \
- ${cpu_temp} \
- $(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq) \
- $(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq) \
- $(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq) \
- $(cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_max_freq) \
- $(cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_min_freq) \
- $(cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq) \
- ${gpu_rate} \
-
- sleep 1
- done
2.脚本中节点说明
/sys/class/thermal/thermal_zone1/temp #CPU温度
/sys/module/ged/parameters/gpu_idle #GPU空闲率
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq #cpu0~3核最大频率
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq #cpu0~3核最小频率
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq #cpu0~3核当前频率
/sys/devices/system/cpu/cpufreq/policy4/cpuinfo_max_freq #cpu4~7核最大频率
/sys/devices/system/cpu/cpufreq/policy4/cpuinfo_min_freq #cpu4~7核最小频率
/sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq #cpu4~7核当前频率
* 基于Android9.0平台,其他平台的路径可能有些许差异
* 芯片总共8核,0~3核的策率为policy0,4~7核的策率为policy4
3.脚本用法说明,依次运行如下命令
# adb root
# adb remount
# adb push cpu_util.sh /system/bin/
# adb shell
# ./system/bin/cpu_util.sh
三、分析数据
1.部分数据如下
2.读取3min左右的数据绘制成图表如下
从上图可以看出3min内CPU频率随着温度变化的关系,大概是温度达到75度左右开始,cpu0~3核频率开始急剧下降,最后降到最低的793000HZ,保持一段时间,当CPU温度低于75度左右开始频率变高。
测试发现系统卡顿时也是这段时间,所以得出结论,CPU温度升高导致降频率,进而导致系统运行卡顿。
定位到系统卡顿是因为CPU温度升高导致,后续可以从两方面进行优化:
1)分析哪些应用占用CPU特别高,优化对应应用CPU占用率
2)从硬件结构分析,提高CPU的散热效率
这次对系统卡顿问题的分析就到这里,分析步骤写的比较简单,如果哪些地方写的不对或者有哪些地方不懂的可以给我留言,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。