#!/bin/bash
# 配置参数(可根据需要调整)
PID=628 # 目标进程PID
INTERVAL=1 # 采集间隔(秒)
DURATION=300 # 总采集时长(秒)
OUTPUT_FILE="thread_data_$(date +%Y%m%d_%H%M%S).csv"
# 检查ADB连接
if ! adb devices | grep -q "device$"; then
echo "错误:未检测到连接的设备,请确保ADB已连接"
exit 1
fi
# 写入CSV表头
echo "timestamp,tid,thread_name,cpu_percent,res_kb" > "$OUTPUT_FILE"
echo "开始采集PID $PID 的线程数据,持续 $DURATION 秒,输出至 $OUTPUT_FILE..."
# 计算采集结束时间
END=$((SECONDS + DURATION))
# 循环采集数据
while [ $SECONDS -lt $END ]; do
TIMESTAMP=$(date +%s%3N) # 毫秒级时间戳
# 核心改进:
# 1. 用sed过滤ANSI终端控制字符(去除颜色、光标指令)
# 2. 用awk提取有效行(过滤标题行、空行)
# 3. 动态解析字段(通过关键字定位,避免固定索引错误)
adb shell "top -H -p $PID -d 0.1 -n 1" 2>/dev/null | \
sed -r "s/\x1b\[[0-9;]*m//g" | # 移除所有ANSI控制字符
grep -vE "Threads:|Mem:|Swap:|TID|^$" | # 过滤非线程数据行
while read -r line; do
# 解析行数据(处理空格分隔,提取关键字段)
# 示例行格式:" 5465 system 20 0 11G 43M 15M S 15.3 0.6 5:35.65 SP:img2tensor ..."
# 字段含义(按顺序):TID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ THREAD_NAME ...
parts=($line) # 按空格分割为数组(自动合并连续空格)
# 容错:跳过字段不足的行
if [ ${#parts[@]} -lt 12 ]; then
continue
fi
TID=${parts[0]}
CPU=${parts[8]} # %CPU在第9个位置(索引8)
RES_STR=${parts[5]} # RES在第6个位置(索引5,如"43M")
THREAD_NAME=${parts[11]} # 线程名在第12个位置(索引11)
# 转换RES为KB(处理M/K单位,默认0)
if [[ $RES_STR =~ ([0-9.]+)([MK]) ]]; then
VALUE=${BASH_REMATCH[1]}
UNIT=${BASH_REMATCH[2]}
if [ "$UNIT" = "M" ]; then
RES_KB=$(echo "$VALUE * 1024" | bc | awk '{printf "%.0f", $0}')
elif [ "$UNIT" = "K" ]; then
RES_KB=$(echo "$VALUE" | bc | awk '{printf "%.0f", $0}')
fi
else
RES_KB=0 # 无效格式时默认为0
fi
# 写入CSV(确保字段完整)
echo "$TIMESTAMP,$TID,$THREAD_NAME,$CPU,$RES_KB" >> "$OUTPUT_FILE"
done
sleep $INTERVAL
done
echo "采集完成!数据已保存至 $OUTPUT_FILE"
记录的csv一点不对
timestamp,tid,thread_name,cpu_percent,res_kb
1753787679283,4931,SP:img2tensor,0.0,27648
1753787679283,731,HwBinder:628_1,0.0,27648
1753787679283,732,HwBinder:628_2,0.0,27648
1753787679283,628,hidl_service@1.
[?25h[999H[K[?25h[?25h[999H[K,0.0,27648
1753787680671,4931,SP:img2tensor,0.0,27648
1753787680671,731,HwBinder:628_1,0.0,27648
1753787680671,732,HwBinder:628_2,0.0,27648
1753787680671,628,hidl_service@1.
[?25h[999H[K[?25h[?25h[999H[K,0.0,27648
1753787682043,4931,SP:img2tensor,0.0,27648
1753787682043,731,HwBinder:628_1,0.0,27648
1753787682043,732,HwBinder:628_2,0.0,27648
1753787682043,628,hidl_service@1.
[?25h[999H[K[?25h[?25h[999H[K,0.0,27648
1753787683409,10010,hidl_service@1.
,66.6,31744
1753787683409,9996,SP:img2tensor,11.1,31744
1753787683409,9990,SP:img2tensor,7.4,31744
1753787683409,9997,SP:img2tensor,7.4,31744
1753787683409,9991,SP:img2tensor,7.4,31744
1753787683409,4931,SP:img2tensor,7.4,31744
1753787683409,9992,SP:img2tensor,3.7,31744
1753787683409,10101,streampipe/9996
,0.0,31744
1753787683409,10022,streampipe/9991
,0.0,31744
1753787683409,9994,SP:img2tensor,0.0,31744
1753787683409,9993,streampipe/9993
,0.0,31744
1753787683409,9995,SP:img2tensor,0.0,31744
1753787683409,9998,stream_callback
,0.0,31744
正确的应该如下
Threads: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie
Threads: 17 total, 2 running, 15 sleeping, 0 stopped, 0 zombie
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Threads: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie
Mem: 7315424K total, 6904284K used, 411140K free, 8104K buffers
Swap: 3969620K total, 1024K used, 3968596K free, 1888448K cached
800%cpu 314%user 2%nice 170%sys 291%idle 0%iow 20%irq 3%sirq 0%host
TID USER [CPU]%CPU %MEM TIME+ THREAD PROCESS
8097 system 7 67.0 0.5 3:15.31 hidl_service@1. [email protected]
4931 system 3 12.0 0.5 13:38.87 SP:img2tensor [email protected]
8085 system 5 11.0 0.5 0:22.39 SP:img2tensor [email protected]
8084 system 5 8.0 0.5 0:23.38 SP:img2tensor [email protected]
8082 system 5 8.0 0.5 0:22.42 SP:img2tensor [email protected]
8087 system 5 7.0 0.5 0:22.86 SP:img2tensor [email protected]
8088 system 5 6.0 0.5 0:22.73 SP:img2tensor [email protected]
8083 system 5 6.0 0.5 0:22.99 SP:img2tensor [email protected]
8086 system 5 6.0 0.5 0:22.55 SP:img2tensor [email protected]
8081 system 5 5.0 0.5 0:22.75 SP:img2tensor [email protected]
8089 system 5 2.0 0.5 0:05.24 stream_callback [email protected]
8090 system 5 2.0 0.5 0:05.27 stream_callback [email protected]
8185 system 3 0.0 0.5 0:00.00 streampipe/8081 [email protected]
8124 system 4 0.0 0.5 0:00.00 streampipe/8083 [email protected]
732 system 0 0.0 0.5 0:00.41 HwBinder:628_2 [email protected]
731 system 4 0.0 0.5 0:00.00 HwBinder:628_1 [email protected]
628 system 3 0.0 0.5 0:00.47 hidl_service@1. [email protected]
最新发布