Matrix 是一款微信研发并日常使用的 APM (Application Performance Manage) ,当前主要运行在 Android 平台上。Matrix 的目标是建立统一的应用性能接入框架,通过对各种性能监控方案快速集成,对性能监控项的异常数据进行采集和分析,输出相应问题的分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。
Matrix 当前监控范围包括:应用安装包大小,SQLite 操作优化,帧率变化,卡顿,启动耗时,页面切换耗时,慢方法,文件读写性能,I/O 句柄泄漏, 内存泄漏等。
APK Checker 是针对 Android 安装包的分析检测工具,根据一系列设定好的规则检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。当前,APK Checker 主要包含以下功能:
读取 manifest 的信息
按文件大小排序列出 APK 中的所有文件
统计方法数
统计 class 数目
检查是否经过资源混淆(AndResguard)
搜索不含 alpha 通道的 png 文件
搜索未经压缩的文件类型
检查是否包含多 ABI 版本的动态库
统计 APK 中包含的 R 类以及 R 类中的 field count
搜索冗余的文件
检查是否有多个动态库静态链接了 STL
搜索 APK 中包含的无用资源
搜索 APK 中包含的无用 assets 文件
搜索 APK 中未经裁剪的动态库
SQLite Lint是一个 SQLite 使用质量的自动化检测工具,犹如一个 SQLite 优化高手在开发或者测试过程中不厌其烦地、仔细地 review 你的 SQL 语句,是团队高质量 SQLite 实践中的一个有用工具。SQLite Lint 当前支持的检测能力包括:
检测索引使用问题
检测冗余索引问题
检测 select * 问题
检测 Autoincrement 问题
检测建议使用 prepared statement
检测建议使用 without rowid 特性
Trace Canary 通过 choreographer 回调、编译期插桩的方式,实现了高准确率、高性能的卡顿检测、定位方案,并扩展支持了多个其它流畅性指标,包括:
界面流畅性评估
卡顿定位
ANR监控
应用启动及界面切换耗时监控
Resource Canary 是基于 Weak Reference 的特性和 Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具。其中检测采集部分部署在客户端,分析部分部署在服务端,通过分离检测和分析两部分逻辑使该工具的流程对持续集成更友好。当前 Resource Canary 主要包含以下功能:
检测疑似泄漏的 Activity ,输出其类名和引用链
检测内存中图像数据完全一样的重复 Bitmap 对象,输出其类名和引用链
IO Canary 是一个在开发、测试或者灰度阶段辅助发现 IO 问题的工具,目前主要包括文件 IO 监控和 Closeable Leak 监控两部分,提供了 IO 的大盘监控,从而做到心中有数。具体功能包括:
检测主线程 IO 使用不当
检测读写 Buffer 过小
检测重复读操作
检测 Closeable Leak 操作,包括文件读写、cursor 未及时关闭等
Matrix 有哪些优势?
与常规的 APM 工具相比,Matrix 拥有以下特点:
具有更好的可用性:JAR 包方式提供,更方便应用到持续集成系统中,从而追踪和对比每个 APK 版本之间的变化
更多的检查分析功能:除具备 APKAnalyzer 的功能外,还支持统计 APK 中包含的 R 类、检查是否有多个动态库静态链接了 STL 、搜索 APK 中包含的无用资源,以及支持自定义检查规则等
输出的检查结果更加详实:支持可视化的 HTML ,便于分析处理的 JSON ,自定义输出等等
接入简单,代码无侵入
数据量无关,开发、测试阶段即可发现SQLite性能隐患
检测算法基于最佳实践,高标准把控SQLite质量
底层是 C++ 实现,支持多平台扩展
对检测部分生成的 Hprof 文件进行了裁剪,移除了大部分无用数据,降低了传输 Hprof 文件的开销
增加了重复 Bitmap 对象检测,方便通过减少冗余 Bitmap 数量,降低内存消耗
编译期动态修改字节码, 高性能记录执行耗时与调用堆栈
准确的定位到发生卡顿的函数,提供执行堆栈、执行耗时、执行次数等信息,帮助快速解决卡顿问题
自动涵盖卡顿、启动耗时、页面切换、慢函数检测等多个流畅性指标
接入简单,代码无侵入
性能、泄漏全面监控,对 IO 质量心中有数
兼容到 Android P
内外同源,持续完善功能,增加新的监控项,如电量,线程资源,内存监控等等
平台扩展,提供 iOS 等多语言 SDK
打造一套完整的云解决方案
2019/7/19 看了资源监测机制 ResourceCanary ResourceCanary的功能有两个: Activity泄露监测 Bitmap冗余监测 基本原理是: Activity泄露监测: 使用若引用包着avtivity实例 当activity onDestroy时,隔多时间主动执行以下GC,若activity没被回收,则认为是泄露 记录下泄露的activity并生成hprof文件 裁
1.gradle文件配置 apply plugin: 'com.tencent.matrix-plugin' matrix { logLevel "D" trace { enable = true baseMethodMapFile = "${project.projectDir}/matrixTrace/methodMapping.txt"
ViewPager容器内有五个View,如何实现呢? 其实大体可以想象为: 钱包(ViewPager)里面,添加五张不同的钞票(Layout1.2.3.4.5); 1.首先看页面的布局文件whatsnew_viewpager.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.
AR Augmented reality, also known as Mixed reality. It uses computer technology to apply virtual information to the real world. World, the real environment and virtual objects are superimposed on the s
首先是要配置好相关参数,以及一些工具类 public class weChatPayConfig { public static final String DOMAIN = ""; public static final String APP_ID = ""; public static final String APP_SECRET = ""; public stat
JAVA中获取当前系统时间 - Matrix54 - 博客园 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowString { public static void main(String[] args) { SimpleDateFormat df = n
5.2.1 什么是 Elastic APM? Elastic APM 是 Elastic 公司开源的一款 APM 工具,目前还处于 Beta 阶段,它有以下几个优势: 开源。我们可以免费使用,像使用 ELK 一样。 功能完善。API 比较完善,有 Agent、Transaction 和 Trace,默认创建响应时间和每分钟请求数两种图表,且可以使用 Kibana 的 Filter 过滤生成关心的数
本文向大家介绍Android微信图片浏览框架设计,包括了Android微信图片浏览框架设计的使用技巧和注意事项,需要的朋友参考一下 一、业务场景 1、聊天界面发送图片==>多选点选+有右上角”发送”+图片预览==>图片预览支持右上角”发送”逻辑 2、发表动态==>多选点选+右上角”完成” + 图片预览==>图片预览支持右上角”完成”逻辑 3、个人资料更改头像==>单选点选 + 图片预览截图==>图
本文向大家介绍利用django+wechat-python-sdk 创建微信服务器接入的方法,包括了利用django+wechat-python-sdk 创建微信服务器接入的方法的使用技巧和注意事项,需要的朋友参考一下 1、版本说明 :python 2.7.10, Django (1.6.11.6),centos7 2、步骤说明: A、django 建立项目 之后启动服务器,看看是否正确: 配置
链接 NewRelic Elastic APM
ArduPilot/APM是一款开源自动导航系统,支持多旋翼飞行器,传统直升机,固定翼飞机与传统直升机。源码由一个大型爱好者社区开发。 支持的导航板 目前,ArduPilot/APM支持如下自动导航板 PX4 – 一款32位基于ARM的自动导航仪,支持很多高级特性,使用NuttX实时操作系统 APM2 – 一款受欢迎的AVR2560 8位自动导航仪 APM1(已终止开发) – 一款基于AVR256
类似arthas的工具。支持telnet链接、websocket,并提供了默认的websocket的前端页面。 javaagent运行时attach到目标进程,通过netty启动一个rpc接口,接收命令,如果是监控方法耗时、参数、返回值的watch命令, 则创建一个ClassFileTransformer, 通过ASM修改对应的类,在方法前后注入代码,调用Instrumentation.retra