线上APM

线上APM

本文链接:https://blog.youkuaiyun.com/feather_wch/article/details/131692498

基本概念

1、APM是什么?

  • Application Performance Monitor

2、内存监控方案

  1. 手动GC:Matrix
  2. 阈值处理:KOOM

3、FPS监控方案

  1. Handler机制(Looper Printer接口)- 看消息处理速度
  2. IdleHandler(延迟操作)- 无事可做时,可以做FPS监控
  3. ANR监控 -
  4. 掉帧监控

4、IdleHandler有什么用?

  1. 适合延迟操作
    Looper.myQueue().addIdleHandler(new Message,IdleHandler){
    queueIdle()
    return true: 可以不断执行
    return false: 只执行一次
    }

5、 Glide展示Gif时,IdleHandler就是失效

FPS监控

6、FPS代码写在哪儿?

  1. onResume

7、FPS两种方案,区别是什么?

  1. Handler:消息监听,效果很好。没有性能问题。
  2. 编舞者:不断执行会掉帧,doFrame,线上影响性能

8、要看到每个方法的耗时

  1. hack手段:每个方法经过dalivk或者art的某个函数,不需要修改字节码。存在兼容性和安全性问题。
  2. 字节码插装,编译期间修改所有class文件中函数字节码,对所有函数前后打点插装

9、rabit-client;fps的不适合用了

  • 安卓11前 编舞者 mlock对象可以获取到fps指标。安卓十一反射被禁止,没办法使用。

10、FPS高 60帧/s 能代表不卡吗?

  1. FPS看平均,如果某一段时间集中掉帧,就会卡

11、如何计算开机到Activity首帧的时间?

  1. CP打发
  2. contentprovider中算时间,acrivity onWindowFovusChanged中算时间。
  3. 之间就是加载的时间。

内存泄漏

1、内存泄漏方案分两种

  1. Leakcanary主动gc:影响性能
  2. KOOM一套

以后学习内容

1、Tinker的so加载原理/流程 => dex加到数组前面
2、【时序数据库】
3、http dns

面试

1、讲到so,就要讲兼容性问题,写了一套自己的动态加载库(ReLink),讲原理和思路

2、错误日志,动态上传

  1. WorkManager
  2. 压缩,加密。

ReLinker集成和使用

1、so动态加载库 KeepSafe/ReLinker

  1. 解决什么问题?
  2. 解决so加载异常问题。UnsatisfiedLinkError(so没找到对应的库)
  3. 帮助重新link
  4. 优点:找so时,日志会回调出来。

2、UnsatisfiedLinkError

  1. so没找到对应的库
  2. 原因:兼容问题
  3. 向上是兼容的,向下是不兼容的。

3、厂商魔改ROM改的是什么?

  1. so加载的路径

4、so加载的路径有哪些?(三种)

5、ApplicationInfo

  1. nativeLibraryDir
  2. secondaryNativeLibraryDir - 备用目录,国内环境被改掉了

6、Relink原理

  1. 模拟su:需要root权限
  2. 删除so路径,杀死进程
  3. 出现UnsatisfiedLinkError异常

7、elf是什么?

  • 动态链接库,so做成二进制

8、Relink核心技术点

  1. 解析so二进制文件,获取so依赖属性
  2. 解决了依赖问题:
  3. 6.0以下存在so依赖,1个so依赖其他3个so。加载顺序固定;
  4. 7.0以上自动做
### 线上问题追踪的方法与工具 线上问题追踪是软件开发和运维中非常重要的一环,尤其是在分布式系统或生产环境中。以下是几种常见的方法和工具,用于帮助开发者快速定位和解决问题。 #### 方法一:动态追踪技术 动态追踪技术允许开发者在不重启系统或服务的情况下,实时监控程序的行为。例如,`SystemTap` 是一种强大的工具,可以用来分析 Linux 系统的运行状态[^1]。通过编写简单的脚本,开发者可以捕获特定的系统调用、函数入口和出口等信息,从而追踪到问题的根本原因。 #### 方法二:后台持续运行系统追踪工具 对于难以复现的问题,可以在后台持续运行系统追踪工具,如 `Perfetto`。这类工具能够记录系统的详细活动日志,并在问题出现时停止追踪并生成报告文件[^2]。通过对这些文件的分析,开发者可以找到导致问题的关键事件链。 #### 方法三:使用 Java 诊断工具 Arthas 如果问题是发生在 Java 应用中,可以考虑使用阿里巴巴开源的诊断工具 `Arthas`。它支持在线调试、类信息查看、线程分析等功能,甚至可以直接追踪方法的执行耗时[^3]。以下是一个简单的示例,展示如何使用 Arthas 追踪某个方法的耗时: ```bash # 启动 Arthas java -jar arthas-boot.jar # 假设我们要追踪 com.example.MyClass 中的 myMethod 方法 trace com.example.MyClass myMethod ``` #### 方法四:抓取线上应用的日志 当遇到无法复现的线上问题时,抓取应用的日志是一种直接且有效的方法。例如,在 Android 应用中,可以通过 ADB 工具获取 APK 的启动日志[^4]。具体步骤如下: 1. 确保设备已连接并通过 USB 调试模式启用。 2. 使用以下命令抓取日志: ```bash adb logcat > startup_log.txt ``` 3. 分析生成的 `startup_log.txt` 文件,寻找异常或错误信息。 #### 方法五:结合 APM(应用性能管理)工具 APM 工具如 New Relic、Datadog 或 Alibaba Cloud ARMS 可以提供全面的应用性能监控。它们不仅能够追踪请求的响应时间,还可以分析数据库查询、外部服务调用等性能瓶颈。通过设置告警规则,开发者可以在问题发生时立即收到通知。 --- ### 注意事项 - 在使用任何工具之前,请确保已获得必要的权限,尤其是在生产环境中。 - 对于敏感数据,务必采取适当的保护措施,避免泄露用户隐私。 - 动态追踪和日志抓取可能会对系统性能产生一定影响,建议在非高峰时段进行操作。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值