作为 Android CI 的一部分运行一些内存分析

Posted

技术标签:

【中文标题】作为 Android CI 的一部分运行一些内存分析【英文标题】:Running some memory analysis as part of Android CI 【发布时间】:2016-05-10 17:07:01 【问题描述】:

作为 CI 的一部分,需要一些指针/想法来以自动化方式计算 android 应用上的基线和一些基本内存统计信息。

有人试过通过测试来做到这一点吗?有什么经验教训吗?我知道覆盖率分析插件,但没有任何插件可以帮助计算特定场景中某个 APK 的内存占用。

目标不一定是问题所在,而是帮助标记应用程序的内存消耗增加/减少,查看趋势并帮助表明可能存在的问题并需要进一步挖掘

【问题讨论】:

【参考方案1】:

最好的方法是手动分析您的应用程序。重复执行一项活动,并结合使用内存演练、堆查看器和分配跟踪器来查找问题。

但是,如果您必须通过 CI(AFAIK 没有可用的插件)来完成,有两种方法可以解决:

1) 运行您的 CI UI 测试用例并使用 dumpsys:

在测试开始、每个 TC 之后和每个 TC 结束时使用 dumpsys:

Runtime.getRuntime().exec(new String[]ADB_PATH,"shell","dumpsys meminfo com.example.app >/sdcard/memdump"+filename+".txt","exit","adb pull memdump"+i+".txt");

这应该会为您提供一个包含应用程序 meminfo 的 filename.txt。您在这里需要的是您的应用程序的 PSS 值。 PSS 越重视应用程序的内存占用量。只需将文件作为流打开。使用模式搜索获取 PSS 值并将其保存在每个 TC 之后的列表中。这样,在测试之后,您将在应用程序的各个点获得 PSS 值列表。您可以从中创建趋势/图表。

如果它是严格的线性图,那么您应该深入研究。除此之外,您不会遇到很多问题。

2) 编写一个重复执行操作的套件并使用 dumpsys:

发现偷偷摸摸的内存泄漏需要您重复执行一些操作(例如启动 50 次活动) 假设您有一个主页,您可以从菜单栏刷新它。

现在写一个TC:

a) 转到菜单栏并单击刷新按钮。 b) 转储 meminfo ,获取 PSS 并将其保存在列表中。 c) 重复一个 d) 重复执行此操作,比如说 50 次,然后为该特定活动制作趋势图。

这将是一个耗时的套件,但您将获得的趋势将是有意义的,并且应该会为您找到好的问题。

我建议你使用 2。另外,如果有人可以提出任何改进或其他方式,那就太棒了。

【讨论】:

以上是关于作为 Android CI 的一部分运行一些内存分析的主要内容,如果未能解决你的问题,请参考以下文章

在dockerfile和CI上运行构建和测试?

Android APP 性能优化的一些思考

在现代 CMake 中设置全局选项?

Android Detail:进程篇-进程内存分配与优先级

Java Selenium CI 构建运行速度比本地快得多?

如何使用GitLab和Rancher构建CI/CD流水线 – Part 2