CPU 使用 Android 模拟器 (qemu-system-i386.exe)

High CPU usage with Android emulator (qemu-system-i386.exe)

仿真器qemu-system-i386.execpu使用率几乎一直在运行7~9之间

Android 工作室 2.1 Android SDK 工具:25.1.3 主机操作系统:Windows 7 - i7 2630QM - 8GB Ram 已安装 Intel x86 Atom 系统映像

无论我在模拟器中更改什么设置,例如:模拟性能、多核 CPU、x86-64 图像,总是一样

风扇一直开着真烦人

有人解决了这个问题吗?

更新:

我已经在genymotion安装了Genymotion插件com/plugins,效果非常棒

持续使用 CPU 的原因可能是声音。如果您的模拟器不需要声音,您可以通过编辑 AVD 的配置文件来禁用它。

Change/add 这两行

hw.audioInput=no
hw.audioOutput=no

更新:正如 buncis 所说,如果不需要,您也可以尝试禁用 GPS:

hw.GPS = no 

Linux/Mac 上,文件位于 ~/.android/avd/.avd/config.ini
Windows 上,文件位于 C:\Users\\.android\avd\.avd\config .ini

在 Mac 上,我注意到在我的笔记本电脑进入睡眠状态后模拟器使用了超过 100% CPU。按照本杰明的建议关闭音频并没有解决这个问题。

通过长按模拟器上的电源按钮重启模拟设备对我有效。

就我而言,我只在 运行 多个模拟器实例时遇到这个问题。

重新运行 Android SDK (<Android SDK path>\extras\intel\Hardware_Accelerated_Execution_Manager\intelhaxm-android.exe) 中提供的英特尔硬件加速执行管理器 (HAXM) 安装程序,select 更改,看看有多少内存分配给了HAXM。如果它是 2 GB 或更少,您可能希望将它提高到至少 4 GB。然后重新启动您的模拟器并查看 CPU 使用率是否下降。

使用 x86_64(或 64 位)模拟器为我解决了这个问题。他们推荐 x86 版本,但它对我不利。

我通过将监视器的帧速率设置为 60hz 减少了 CPU 模拟器的使用。频率为 144hz,我的 CPU 为 运行,频率为 60% - 70%。通过仅更改监视器的帧率,它现在处于 3% 的使用率。

更改分辨率对我有效。我使用的是 1440 x 2560 560 dpi Oreo 8.1。现在我正在使用 M-DPI Oreo 8.1

Win7、HAXM​​ 7.2.0 上的 qemu 也有同样的问题。我试过关闭音频,但没有用,qemu 随时消耗 CPU 的大约 20%,Android 在 x86 和 x64 图像上工作得非常慢。

我在 HAXM 的发行说明文件中找到了解决方案:

  • 在 Windows 上,Avast Antivirus 可能会干扰 HAXM 并导致 Android 模拟器或 QEMU 到 运行 非常慢慢地。解决方法是在 Avast 设置 > 故障排除中取消选中 "Use nested virtualization where available"。

我有 Avast Pro Antivirus 18.5。我取消选中此参数,重新启动 PC,现在 qemu 在闲置时消耗 0%,Android 工作正常。

更新:如果 QEMU 再次开始使用 CPU,首先检查 Avast 的更新状态。后台更新后,Avast 可能会再次开始干扰 HAXM。只需重启 Windows 即可解决。

我无法使用 config.ini 文件关闭音频,只能使用 qemu 的 -noaudio cmd 行参数。然而,使用 Android Studio 3.2,你不能向模拟器添加自定义参数,所以我做了这个:

在 Android SDK 的模拟器目录中,在我的例子中是 ~/Android/Sdk/emulator/

mv emulator emulator.orig

创建一个名为 emulator 的 bash 脚本,内容为:

#!/bin/bash

DIR=`dirname "[=11=]"`

$DIR/emulator.orig -noaudio $*

然后:

chmod +x emulator

现在,参数 -noaudio 将被添加到来自 Android Studio 的模拟器的所有调用中,并且将为您节省很多 CPU 个周期。

我在 2018 年 11 月开始时遇到了这个问题。

虚拟设备正在尝试连接到移动网络数据,所以我在设备内部将其关闭。 现在工作很好。

找出虚拟设备上使用最多的内容CPU:

adb shell

$ top

这将显示 CPU 使用率最高的进程列表。

这将帮助您确定它是模拟器内的一个进程(例如您的应用程序)、模拟器内的另一个进程,还是只是模拟器本身使用大量 CPU。

在后一种情况下,尝试通过安装 HAX(本机英特尔指令)优化模拟器,或者使用 AVD 配置文件编辑器启用硬件加速。

在设置中禁用定位,同时禁用触摸声音。

我的情况,因为我选择 software 用于 adv 中的图形渲染。因此,在更改 hardware 后,CPU 的使用量从 60 减少到 10,CPU 的温度从 70 减少到 40。

我使用的是 macOS Catalina(版本 10.15.2),配备英特尔酷睿 i9 和 16 GB 内存以及 Radeon Pro 560X 4GB 显卡。

我通过 使用 [= 重新启动模拟设备 解决了 qemu 的高 CPU 使用问题18=]模拟电源按钮.

此外,在创建 AVD 时,我选择了 Hardware 图形渲染器而不是 Auto

我通过取消"Auto-save current state to Quickboot"

解决了

快照 -> 设置 -> 自动将当前状态保存到 Quickboot - 否

在我的例子中,是快速启动导致了问题,要强制进入正常启动,请打开 C:\Users\<username>\.android\avd\<AVD name>\config.ini 中的文本文件并至少更改其中一个值。

例如更改行

hw.battery=yes 

hw.battery=no

使用旧的 Android 版本 我使用 Lollipop Galaxy Nexus API 22220 中删除 CPU 用法%30% 左右! ...

我还切换了:仿真性能>图形>硬件

使用 Android Api 25 ...图形硬件和关闭 AVD 音频和 GPS 对我不起作用...

平台:MacOS

在我的例子中,它是 飞行模式,当打开时 CPU 使用率跃升至 99%:

adb shell

$ top

这个问题是在 Android 10.0 x86 上发现的。 如果您关闭飞行模式,那么 CPU 的使用应该 return 正常。

我最近在 Windows 10 (18363) 上遇到了同样的问题:AVD 以 100% 的速度使用了主机的所有 16 个线程,看来 AVD 上的 android.hardware.graphics.composer@2.1-service 进程是罪魁祸首.

对我的情况有帮助:转到 AVD settings - Advanced - 将 OpenGL ES renderer 更改为 Desktop native OpenGL 并重新启动 AVD。现在它使用了我 CPU 资源的 2-3%。希望这对某人有所帮助。

就我而言,使用硬件图形解决了我的问题。

随心所欲

$adb shell
$top

看哪个PID高CPU

$kill -9 <PID>

对我来说,我关闭了 WIFI,使用率从 112% 下降到 10%。我建议这样做

api31&32 上:使用 显示高级设置 编辑每个 AVD 配置并确保:

  • 多核 CPU > max (<=> hw.cpu.ncore=8, 4/核心不够,可能会过热cpu 强烈)
  • 显卡 > 硬件 (GLES 2.0)
  • 无 SDCard (<=> hw.sdCard=无)