移动性能测试 开启移动专项之旅 (android 客户端性能-cpu)

卡斯 · August 09, 2016 · Last by 卡斯 replied at December 13, 2017 · 2757 hits

缘起

老板交代需要针对新的大版本进行专项测试,于是乎开始了android端的测试

随着

软件的安装运行,针对cpu的验证开启,突然发现不对,对于应用我并没有进行任何操作,界面一直停留在登录页面,为何cpu使用率如此之高呢?


思考

界面无任何操作,难道是后台不停的在进行交互么?

验证


查看内存使用,并无明显异常


查看日志,嘿,有点意思


为了进一步确认问题,监控流量看看,问题基本可以确认

问题得到确认,那么接下来是否可以提交开发了?

对于进一步的人来说,当然是no了

分析

通过日志分析及流量分析发现,后台存在一定频率的做上传动作,俗称心跳,查看了下时间为5s,总所周知,这个一般都是由服务端控制,那么我们是否可以通过修改服务端的频率来控制从而解决此问题呢

动手

通过查询服务端的配置项,对于心跳的频率进行了调整为15分钟一次,再次查看cpu的使用率,大吃一惊,cpu不降反而升

什么鬼
难道是服务端的配置项没生效?客户端存在此控制?

为了验证疑惑,再次打印日志来查看频率,结果是

果然
服务端的配置没有生效!!!!

为何服务端的配置没有生效?难道客户端没有从服务端拉取最新的控制选项?还是需要某种机制来触发?
回想一下修改服务端的配置后,貌似我的测试客户端并没有重启?会不会和此有关系?
于是乎
重启客户端,再次查看日志,三分钟过去了,没有再次打日志,终于服务端的配置生效了

但是
问题解决了么,怀着忐忑的心再次查看cpu的消耗,无任何改变!!!!!

难道和心跳无关?回想一下此前测试的前一个版本cpu并没有这么高的消耗,上个版本峰值都不超出40%

看了下本版本和上版本的功能点对比,只是增加了一个xx轨迹,这个就是我们当初查看日志发现的心跳,那么问题必然出现在此,但为何单纯的修改心跳频率并不能修复cpu的消耗过高的问题呢,是否还有未知?

不死心的我继续往下走
内存对比
这次我们再次打开一个系统浏览器应用,看到cpu的消耗大约在50%,但是被测应用还是在100%以上,对比分析内存,突然发现被测应用的虚拟机内存消耗很高啊

难道是虚拟机一直在运行吃高内存导致cpu居高不下?
新增的功能的进程也是挂在虚拟机运行?

再次查看应用的内存使用,发现果然存在dalvik里面的内存不释放!

到此
问题确认

后记

查询应用的源码,存在2个死循环,第一个是上传数据机制,第二个是查询本地数据机制 ╮(╯_╰)╭

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 23 条回复 时间 点赞

😅 这是还没写完就发出来了吗?

哈哈

看下你手机几核芯,如果是8核,基数可是800%

#4楼 @jira 不过话说也啥情况也不干,也挺大的

查下这个界面什么占用了CPU耗时,比如自定义view 一直在重绘

我用adb shell测cpu占用率,然后测出来数据应该如何分析呢,怎么判断这个cpu占用率是否合理呢

写的像小说,引人入胜

卡斯 #11 · August 09, 2016 作者

@liyaoyao 一般情况峰值不超过90% 静态不超过5% 一般运行状态不超出30%

我没记错的话,dumpsys cpuinfo不是实时更新的。
我自己是用top -n 1 -d 0.1 更多,而且能做到300ms更新一次。

截图有一种朦胧的美

适合搞个视频出来.

卡斯 #15 · August 09, 2016 作者

@seveniruby 我已经打算列入那个里面了

个人感觉内存泄漏可能一直存在吧。。。看架势感觉像是修改了APP的内存配置导致问题容易暴露的吧。。。

#12楼 @sziitash 用top的话本身top占用的资源也不算少,你还设定0.1秒😈

@kasi 多谢分享!有张图没打马,暴露了😏

后台持续占用,直接traceview拉一把trace不就知道了吗

请问,我们大概的计算应用消耗总内存,可以用adb shell top -n 1 grep XXX .然后把对应的进程服务占用内存加起来得出吗?
比如计算威信的,这一次大概消耗内存220M左右。

卡斯 #21 · December 12, 2017 作者
小萨 回复

对的

卡斯 回复

我就是昨天测试微信看到消耗内存这么多,我就开始怀疑自己计算方式了。。基本600多M

卡斯 #23 · December 13, 2017 作者
小萨 回复

正常 我开在电脑上面的mac版本微信有时候还是2个g的消耗

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up