3.2.3 Android & Java性能优化工具锦集
1 minute read
磁盘
工具集
工具 |
问题 |
能力 |
Systrace / Strace |
主线程I/O、I/O操作耗时过长 |
发现 |
StrictMode |
主线程I/O |
发现 + 定位 |
内存
工具集
工具 |
问题 |
能力 |
场景 |
top/procrank |
内存占用过大,内存泄露 |
发现 |
初步发现内存泄露 |
StrictMode |
Activity泄露 |
发现 |
初步发现内存泄露 |
meminfo |
Native内存泄露、是否存在Activity、ApllicationContext泄露、数据库缓存命中率低 |
发现+初步定位 |
初步发现Native内存泄露 |
MAT、Finder、JHAT |
Java层的重复内存、不合理图片解码、内存泄露等 |
发现+定位 |
定位内存泄露和OOM |
libc_malloc_debug_leak.so |
Native内存泄露(JNI层) |
发现+定位 |
|
LeakCanary |
Activity内存泄露 |
自动发现+定位 |
初步发现内存泄露, 获取堆栈 |
APT |
内存占用过大,内存泄露 |
发现 |
|
GC Log from Logcat、 GC Log生产图标 |
人工触发GC for Explicit而导致的卡顿,Heap内存不足触发GC for Alloc 而导致的卡顿 |
发现+初步定位 |
|
Systrace |
GC导致的卡顿 |
发现 |
|
Allocation Tracker |
申请内存次数过多和过大、辅助定位GC Log发现的问题 |
发现 + 定位 |
定位[引发大量GC引起的卡顿或者内存问题 |
chrome devtool |
HS的内存问题 |
发现+定位 |
|
网络
工具集
工具 |
问题 |
能力 |
场景 |
Wireshark |
最专业的网络分析工具,全部网络性能问题的分析定位都可以查看它 |
发现+定位 |
网络问题全能冠军 |
Fiddler/charles |
主要针对HTTP,帮助发现HTTP众多性能问题,还能模拟错误和延时的HTTP返回 |
发现+定位 |
模拟和定位HTTP问题 |
mitmproxy |
中间人代理工具, 可用于抓包 |
发现+定位 |
定位HTTP问题 |
Tcpdump |
抓包工具,要Root权限 |
发现+定位 |
|
traceroute |
定位网络路由问题,包括就近接入、跨运营商问题 |
发现+定位 |
|
ARO |
无压缩、重复下载、缓存失效等等 |
自动发现+定位 |
|
tPackageCapture |
无Root抓包 |
定位 |
|
CPU
工具集
工具 |
问题 |
能力 |
Top |
|
发现 |
ps |
|
发现 |
dumpsys cpuinfo |
|
发现 |
Systrace |
|
定位 |
TraceView |
|
定位 |
Trepn |
耗电的分析工具, 显示电池耗电量, 获取骁龙芯片GPU的频率和负载 |
发现 |
性能分析
工具集
工具 |
问题 |
能力 |
场景 |
TinyDancer |
FPS |
发现 |
初步发现帧率问题 |
Systrace |
分析绘制时流程导致的卡顿,能大概定位是GC、I/O、贴图太大,还是没用ViewHolder的问题 |
发现+初步定位 |
|
TraceView |
能深入定位分析各种流畅度与时延问题,但是只能初步定位XML布局和OpenGL绘制的性能问题 |
发现+定位 |
|
Gfxinfo/Slickr |
定位硬件加速下的性能问题 |
发现+初步定位 |
|
Hierarchy Viewer |
定位XML布局导致的性能问题 |
自动发现+定位 |
|
Tracer for OpenGl/Adreno/UXTune |
具体定位绘制性能问题 |
发现+定位 |
|
Chrome Devtool |
定位具体的H5卡顿问题 |
发现+定位 |
|
问题场景与定位经验
- Crash
- 出现捕获不了日志或者崩溃堆栈比较奇怪的crash
- 定位
- 在该场景下, 使用内存压测, 看看内存(显存, Java内存和Native内存)上涨(暴涨)情况, 如出现泄露或者暴涨, 获取可分析的数据(内存dump文件)
- 分析, 解决
- Java内存可通过获取hprof
- Native内存可通过DDMS的Native Heap
- OOM
- 定位
- 挖掘特征, 包括但不限于代码改动、机器特征、时间特征等,必要时还需要做一定的统计分析
- 根据特征寻找复现路径, 使用内存压测
- 获取可分析的数据 (内存dump文件)
- 分析, 解决
- ANR/死锁
使用教程
参考资料