写点什么

专访刘刚:360 手机卫士的性能监控与优化

  • 2016-08-09
  • 本文字数:1804 字

    阅读完需:约 6 分钟

作为一款移动端产品,除了要保证安全性之外,手机卫士还需要考虑尽量减少对手机资源的消耗,而要做到这些,360 手机卫士对于自身的性能优化、性能监控,以及对不同产品的适配问题,有哪些改进之处值得我们借鉴呢?

2016 年 8 月 18-19 日,由极客邦、InfoQ 和听云联合主办的 APMCon2016 中国应用性能管理大会将在北京举行(现在报名,享8 折优惠),聚焦当前最为关键的移动端、Web 端和Server 端的性能监控和管理技术。

本届大会,我们有幸邀请到了360 手机卫士高级技术经理 刘刚,前来分享《手机卫士之性能演进历程》的内容,会详细地介绍Android 端手机卫士的性能优化之路,如何做到对系统故障的预防、监控、诊断、响应等技术细节。

InfoQ:360 手机卫士的性能优化经历了哪几个阶段?

刘刚:我大概是在 2013 年 10 月来到手机卫士,经历了手机卫士优化的 3 个阶段:

第一个阶段主要是插件化和拆分进程,这个阶段主要的目的是解决方法数和内存的问题。

第二个阶段功能模块插件化,这个阶段的目的解决两件事:

  1. 解决卡慢问题,因为代码模块化解耦后,主程序的代码(核心 dex)减少,并且经过一定优化后,比所有竞品 APK 体积小,运行内存小;
  2. 功能模块独立,用户可以按需下载,独立升级;

第三个阶段主要是性能监控常态化,这个阶段主要是通过 AOP 的手段,进行实时监控,持续对内存、启动速度、电量、流量等优化。

InfoQ:对于手机卫士这种产品,在性能上有哪些优化点?

刘刚:手机卫士产品作为最常用的移动端产品,和其他移动端产品最大的区别是在非主动使用的情况下,在保证用户手机安全性的同时,要求我们在后台进程对于系统的影响做到最小,所以对于后台进程要做到占用更小的内存,更高效的执行速度,使用非轮询方式等。

InfoQ:对于代码检测,你们使用了哪些工具,是否自己开发了相关的工具?

刘刚:对于代码检查,我们使用 Lint、findbugs 和我们 360 自己独有的代码红线工具,其中 findbugs 我们进行了定制化的修改,添加了检测器,主要检查流关闭问题。

InfoQ:我看到你们使用 AOP 实现静态埋点,为什么使用这种技术?

刘刚:其实 AOP 和无痕埋点我们都有,我们 AOP 主要是做流量、电量等一些监控,这种不存在兼容性的适配问题,无痕埋点这种我们主要是用于启动速度,内存等一些监控,我们是根据监控的对象进行了不同的选型。

InfoQ:静态埋点如何保证最少资源消耗,如何做可扩展?

刘刚:我们使用静态埋点是采样的机制,有云控的开关和有效的监控期,另外在静态埋点处我们只是做了一个异步采样机制,并没有其他执行代码,这样基本上能保证较少的资源消耗,因为静态埋点的机制决定了,扩展性是相对较弱的,我们是通过预埋一些桩,在 AOP 里加了一些动态化的监控机制,通过下发插件或者云控指令的方式进行了一定程度的扩展。

InfoQ:对于实时的性能监控,你们有哪些手段?

刘刚:主要对于进程的冷热启动、Activity 等四大组件的加载时间、线程和 task 的卡慢和内存监控、启动次数,具体的实现方式和原理都会在 APMCon2016 上进行分享。

InfoQ:对于移动应用的性能问题定义了哪些指标?

刘刚:移动端的设备性能差别非常大,性能指标和机型、ROM 相关性特别大,像内存指标不同 ROM、机型上的差异很大,所以定义性能指标时一定和机型进行参考,我们的性能指标主要是包含内存、冷热启动时间、四大组件的加载时间、流量、电量等。

InfoQ:我看到你们使用了插件化技术,对于插件的性能监控和修复,与一般的应用相比有哪些特殊的地方?

刘刚:我们的插件都具有独立的可升级能力,修复只要利用插件升级即可,像热修复对于插件意义没有那么大。另外我们手机卫士的插件都是通过我们自己的编译后台生成的,具备所有的静态 AOP 和动态监控能力,和我们主程序没有什么特殊的地方。

InfoQ:在 8 月份的 APMCon2016 大会上,您将现场分享《手机卫士之性能演进历程》内容,具体会讲那些技术点呢?参会者能有哪些收益?

刘刚:会详细描述我们手机卫士的性能演进的过程,遇到的问题,解决方法以及对应的代码实现,主要包含代码检测、自动化分析、资源优化、实时性能监控、内存分析、磁盘分析以及动态热修复等技术点,相信大家还是有感兴趣的点。

InfoQ:感谢刘老师接受我们的采访,期待您在 APMCon 上的精彩演讲。

关于受访嘉宾

刘刚,360 手机卫士高级技术经理。360 无线技术委员会委员,手机卫士开发 leader,有着 16 年开发经验,有着丰富的客户端 / 服务器端 / 无线端的开发经验,对于新技术仍然保持着强烈好奇心。

2016-08-09 03:166662
用户头像

发布了 164 篇内容, 共 111.3 次阅读, 收获喜欢 392 次。

关注

评论

发布
暂无评论
发现更多内容

在 Go 中使用并发编程 - 第一部分

TuringTuring

并发编程 线程模型 Go 语言

ARTS - Week 1

Khirye

ARTS 打卡计划

奈学教育:分布式架构,刚性事务-2PC必须注意的问题及3PC详细解说

奈学教育

分布式架构 2PC 3PC

写给产品经理的信(3):抗压能力需要多强?

punkboy

生涯规划 产品经理 进阶 压力 工作方式

zabbix实战指南(1)

橙子冰

zabbix

ARTS week 1

锈蠢刀

游戏夜读 | 游戏代码之道

game1night

重学 Java 设计模式:实战建造者模式

小傅哥

设计模式 小傅哥 重构 代码质量 优化代码

spring-data-redis -- 一次执行链路的分析

常清静

Java spring springdataredis

Git 多用户多仓库配置 windows10

halapano

git

变则通,通则久 —— 读《谁动了我的奶酪?》

YoungZY

读书 读书感悟

Linux 终端下记不住命令的使用方法?这个开源项目帮你解决。

JackTian

Linux 开源 运维 操作系统 命令

这么多年了,QQ没发现这个问题吗?

BabyKing

回“疫”录(25):被颜色攻占的地方

小天同学

疫情 回忆录 现实纪录 纪实

ES 操作之批量写-BulkProcessor 原理浅析

常清静

Java elasticsearch 后端

AutoConfigurationImportSelector到底怎么初始化

编号94530

Java spring Spring Boot import

一文道尽 Excel 的 Criterion

张利东

Excel

眼前搁座金山也看不见

池建强

搜索引擎 学习

JavaScript 基础拾遗 —— this 的前世今生

hq

Java 学习 大前端

算法:时间复杂度和空间复杂度

shirley

算法 时间复杂度

团队快速扩张时期的组织架构演进

小鲸数据

团队管理 团队协作 团队 团队组织

MySQL慢查询优化(线上案例调优)

NotFound9

MySQL 开源 架构 运维 编程语言

python实现·十大排序算法之堆排序(Heap Sort)

南风以南

Python 排序算法 堆排序

IDEA 插件开发实战

李孟聊AI

Java 工具 IDEA 插件 idea插件

zabbix 实战指南(2)

橙子冰

zabbix

七年老程序员面试经历

代码诗人

Oracle误删数据闪回

阡陌r

分支管理模式

wiflish

git

Kafka系列8:一网打尽常用脚本及配置,宜收藏落灰!

z小赵

大数据 kafka 实时计算

这个开源神器可快速帮你安装 MacOS 虚拟机!

JackTian

macos GitHub Linux 操作系统 虚拟机

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (九)测试驱动开发(TDD)

编程道与术

Java 编程 软件测试 TDD 单元测试

专访刘刚:360手机卫士的性能监控与优化_后端_徐川_InfoQ精选文章