真机性能监控工具

分析手段和工具

性能监控面板

在微信 Android 7.0.7 版本及以上,我们在小游戏开发版和体验版提供了性能监控面板,可以通过胶囊按钮打开,效果如下图所示

monitoringpanel

开发者可以监控不同内存的占用情况,通过不同内存的变化趋势来判断是否有内存泄漏的情况,各个指标含义如下

名称 含义
summary.native-heap native 内存
summary.system 系统内存
summary.total-swap 总 swap 内存
summary.graphics 显存
summary.java-heap java 内存
summary.total-pss 总内存
summary.private-other 其他私有内存
summary.code 静态代码,资源内存
summary.stack 栈内存

如果发现内存一直增长,为了排除是 GC 延迟的影响,可以在胶囊按钮中,点击开发调试中的 Request Force GC,会去立即调用一次 GC,以此对比内存的真实增长情况。

Heap Snapshot

除此之外,微信 Android 7.0.7 版本及以上,我们在小游戏开发版和体验版提供了 Heap 内存快照的能力,同样是在胶囊按钮中打开,选择开发调试中的 Take Heap Snapshot,在界面弹出如下图所示的提示后,从提示中的位置把 heapsnapshot 拷贝到电脑上

monitoringsave

之后在微信开发者工具中的调试器的 Memory 中,Load 拷贝出来的 heapsnapshot 文件,就可以查看 V8 的内存快照了,效果如下图所示

idememory

heapsnapshot 的使用方法可以参考

https://developers.google.com/web/tools/chrome-devtools/memory-problems/heap-snapshots

V8-CPU-Profile

微信 Android 7.0.7 版本及以上,我们在小游戏开发版和体验版提供了 V8-cpu-profile 的能力,同样是在胶囊按钮中打开,选择开发调试中的 Start CPU Profile,界面上会弹出 “start cpu profiling..” 的提示

startcpuprofile

之后再在开发调试中选择 Stop CPU Profile,在界面弹出如下图所示的提示后,从提示中的位置把 cpuprofile 拷贝到电脑上

cpuprofilesave

之后在微信开发者工具中的调试器单击右上角三个点的按钮 -> More tools -> JavaScript Profiler -> Load,加载刚才生成的 cpuprofile 文件,就可以查看 CPU 的使用情况了,效果如下图所示

idecpuprofile

左上角的下拉菜单可以选择如下三种模式:

  1. Chart:显示按时间顺序排列的火焰图。
  2. Heavy (Bottom Up):按照函数对性能的影响排列,同时可以检查函数的调用路径。
  3. Tree (Top Down):显示调用结构的总体状况,从调用堆栈的顶端开始。

这里我们选择 Tree (Top Down) 模式,按 Total Time 降序排列。可以看到有如下三列:

  1. Self Time:函数调用所耗费的时间,仅包含函数本身的声明,不包含任何子函数的执行时间。
  2. Total Time:函数调用所耗费的总时间,包含函数本身的声明及所有子函数执行时间。即:父函数的 Total Time = 父函数的 Self Time + 所有子函数的 Total Time。
  3. Function:函数名及路径,可展开查看子函数。

具体使用流程可以参考

https://developers.google.com/web/tools/chrome-devtools/rendering-tools/js-execution