You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash的Grep匹配模式计算Android应用的平均内存占用

实现Android应用多次内存采样并计算平均值

嘿,既然你已经能提取单次内存占用的数值了,那咱们把这个逻辑扩展成多次采样求平均的脚本就很简单啦!我给你写个完整的bash脚本示例,直接能用,还能根据你的需求调整参数:

#!/bin/bash

# 配置参数,你可以根据需要修改
PACKAGE_NAME="org.carleton.iot.mobile_cep"  # 目标应用包名
SAMPLE_COUNT=10                             # 采样次数
SAMPLE_INTERVAL=2                           # 每次采样间隔(秒)

# 初始化变量
total_memory=0
valid_samples=0

echo "开始对应用 $PACKAGE_NAME 进行 $SAMPLE_COUNT 次内存采样..."

for ((i=1; i<=SAMPLE_COUNT; i++)); do
    echo "正在进行第 $i 次采样..."
    # 执行adb命令并提取内存数值
    mem_output=$(adb shell dumpsys meminfo | grep "$PACKAGE_NAME")
    # 提取数值部分(比如从"233,328K: org.carleton..."中拿到233,328K)
    mem_value=$(echo "$mem_output" | awk '{print $1}')
    
    # 检查是否成功提取到数值
    if [[ -n "$mem_value" && "$mem_value" =~ ^[0-9,]+K$ ]]; then
        # 去掉逗号和K,转换成纯数字方便计算
        mem_num=$(echo "$mem_value" | tr -d ',K')
        total_memory=$((total_memory + mem_num))
        valid_samples=$((valid_samples + 1))
        echo "第 $i 次采样结果:$mem_value"
    else
        echo "警告:第 $i 次采样失败,未获取到有效内存数据"
    fi
    
    # 最后一次采样不需要等待间隔
    if [[ $i -lt $SAMPLE_COUNT ]]; then
        sleep $SAMPLE_INTERVAL
    fi
done

# 计算并输出平均值
if [[ $valid_samples -gt 0 ]]; then
    avg_num=$((total_memory / valid_samples))
    # 把数字转成带逗号和K的格式(比如233328 → 233,328K)
    avg_value=$(echo "$avg_num" | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"K"
    echo -e "\n采样完成!有效采样次数:$valid_samples"
    echo "平均内存占用:$avg_value"
else
    echo -e "\n错误:未获取到任何有效内存数据,请检查adb连接和应用包名"
fi

使用步骤

  • 把上面的代码保存成mem_avg.sh文件
  • 给脚本添加执行权限:chmod +x mem_avg.sh
  • 确保你的Android设备已经通过adb连接(执行adb devices确认设备在线)
  • 运行脚本:./mem_avg.sh

小提示

  • 如果你已经有自己的数值提取脚本,可以直接替换掉代码中提取mem_value的部分,调用你的脚本获取数值即可
  • 采样间隔和次数可以按需调整:比如测试长时间内存波动,就把间隔设大、次数加多;测试短时间内的内存稳定性,就缩小间隔
  • 如果adb连接不稳定,可以在采样失败的分支里加个重试逻辑,比如重新执行一次adb命令

内容的提问来源于stack exchange,提问作者Amarjit Dhillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:21:04