Android---App内存优化-之-线上内存监控方案

336 阅读2分钟

##背景

  • 最大的线上内存问题就是内存泄漏; 内存溢出和内存抖动,一般都是 与内存泄漏导致的 内存无法释放 相关联; 如果解决了内存泄漏, 那 线上内存问题 就会减少很多;

  • 线上内存监控比较困难, 没办法使用线下的MP、ART等工具去发现问题;


#常规实现 ####注意在线上的一些特定场景

  • 处于 高内存占用的状态 一个APP占用的内存 已经超过了 单个APP最大可用内存的 80%;

  • 其他类似情况;

####常规方案一

  • 当出现 这种特定的线上场景的时候, Dump一下线上内存:Debug.dumpHprofData() 这一行代码可以实现, 将当前的内存信息,转化为一个文件;

  • 在合适的时机, 回传内存文件; 这个文件其实会比较大, 一定不要在 用户处于 数据流量上网的状态 去上传, 要等 用于处于WiFi上网的时候 再去上传;

  • 通过MP、MAT 手动分析内存文件;

  • 方案总结:

    • Dump文件太大, 和 用户使用APP的时间 以及 对象的数量 正相关, 可以用Native Hook 裁剪文件,但是结果文件仍然会很大(几十M);

    • (由于文件比较大)上传的失败率高, 手动分析 大量的 大文件 也很困难;

    • 配合一定策略,有一定的效果;

####常规方案二

  • 把LeakCanary带到线上

  • 预设泄漏怀疑点 LeakCanary在线上 会对预设的泄漏怀疑点 进行监控、分析;

  • 发现泄露时 回传结果

  • 方案总结:

    • 不适合所有情况,必须预设怀疑点; 所以没有预设怀疑点的对象,是没有办法进行 监控和分析的, 方案全面性受到限制;

    • LeakCanary分析过程比较耗时,容易OOM;