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

Windows服务器adb.exe高CPU占用问题及优化方案验证

ADB批量监控Android设备时CPU占用过高的问题与解决方案

背景

在Java应用中每3秒通过ADB监控Android设备状态,使用以下8条ADB命令:

adb shell settings get global airplane_mode_on
adb shell settings get system system_locales
adb shell dumpsys telephony.registry
adb shell "dumpsys content | grep ^Account | grep @ | grep com.google"
adb shell getprop gsm.network.type
adb shell getprop gsm.operator.alpha
adb shell settings get system screen_off_timeout
adb shell settings get global wifi_on

各命令执行耗时情况:

  • 除dumpsys相关命令外,其余命令返回单行结果,readline()执行耗时200毫秒
  • dumpsys telephony.registry返回约5000行,耗时500毫秒
  • dumpsys content | grep ^Account | grep @ | grep com.google返回3-4行,耗时300毫秒

延迟在可接受范围内,但服务器CPU占用剧增:执行这些命令使CPU占用提升30%,仅连接2台设备就出现CPU峰值达100%。经测试,Java应用本身无问题,直接在DOS提示符执行ADB命令也会导致CPU占用升高。

尝试过的无效优化方法

  • 单独发送每条命令
  • 发送合并命令行:adb shell command1 && adb shell command2 && adb shell command3 .."
  • 在命令间添加10/100/200/500毫秒延迟
  • 改用WiFi连接ADB而非USB
  • 更换不同品牌型号的Android设备(三星、谷歌等)
  • 安装最新Android SDK platform-tools,当前版本信息:
>adb version
Android Debug Bridge version 1.0.41
Version 35.0.2-12147458
Installed as C:\Windows\SysWOW64\platform-tools\adb.exe
Running on Windows 10.0.19045

有效解决方案

将所有命令整合到单个ADB会话中执行,通过自定义分隔符区分不同命令的结果,具体实现方式如下:

tResult = adb_shell_method("command1 && echo WWW && command2 && echo WWW && ..");
resultArray = tResult.split("WWW");

此方式执行8条命令耗时约320毫秒,CPU占用不足5%。

后续计划

创建单个ADB会话并长期复用,实现类似String executeADBCommand(String command, <adb session class> ADBSession);的方法来执行命令。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:13:12