You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
使用指南
Zombie 分析
复制全文
下载 pdf
Zombie 分析
Zombie是僵尸对象,即已经释放的对象重复使用,导致野指针问题。
常见场景的野指针问题,在开发过程中借助Xcode工具可以快速暴露并修复,但是还有一些问题由于触发场景比较复杂,被遗漏到了线上,并且线下也难以复现,而这些野指针导致的崩溃问题,仅根据崩溃时的堆栈难以有效排查问题。为了解决这个痛点,应用性能监控全链路版为开发者提供了线上Zombie检测功能。
注意事项
  • Zombie模块能够暴露线上的野指针问题,并且捕获导致野指针的类以及操作堆栈。
  • 野指针不一定会导致崩溃问题,但是此模块接入后会在野指针访问时主动抛出异常,因此可能导致您的应用崩溃率上升,建议仅在灰度时少量开启。
步骤一:判断应用是否存在野指针
通过筛选项中的崩溃详情快速定位。
崩溃调用栈为Objective-C Runtime方法,例如objc_msgSend,objc_retain,objc_release等。
图片
图片
某些情况下,已经释放的内存被操作系统重新分配,导致内存中的对象不是您期望的对象,触发doesNotRecognizeSelector异常。
步骤二:接入SDK
根据已有信息无法解决野指针问题,可以在SDK引入Zombie模块,并配置zombie对象采样率。通过线上Zombie分析功能获取更多现场信息,来解决野指针问题。
  • zombie相关的指标说明:
  • 指标
    说明
    zombie对象采样率
    配置此选项可以控制只对线上部分用户开启功能,默认采样率为0。
    zombie对象采集白名单
    配置此选项后,只有配置中指定的类发生了野指针问题,才会抛出异常并且捕获现场信息。如果不配置此选项,则任意类发生野指针问题,都会触发zombie采集策略。
    zombie对象分析白名单
    分析野指针问题时,可能需要知道对象是如何被释放的。配置此选项后,配置中的类的对象释放时,会保存释放的堆栈,如果后续发生了野指针问题,则会将Dealloc堆栈一同上报,可以在崩溃详情页的崩溃信息 > Dealloc堆栈中查看该信息。
    捕获堆栈对性能有影响,建议先不要配置此选项,当线上发现野指针问题,且无法排查到具体原因时,再结合此选项来获取更多信息。
    dealloc堆栈最大数量
    控制SDK最多保存多少个对象的释放堆栈,增加数量可以缓存更多堆栈,避免野指针发生时缓存中没有对象的释放堆栈;减少数量可以降低对内存的影响。
步骤三:消费数据
您可以在崩溃分析中,消费线上zombie分析上报的数据。
  1. 根据Zombie分析堆栈特征,查找Zombie分析上报的崩溃堆栈。
  1. zombie分析上报的崩溃堆栈,堆栈中有一行zombieMsgHandle的调用栈。
  • 图片
  1. 根据崩溃信息查看是哪个类的对象发生的野指针。
  • 图片
  1. 堆栈无法定位问题,可以配置zombie对象分析白名单,把触发野指针问题的类添加到白名单中。
  • 图片
  1. 根据上报的Dealloc堆栈,查看对象被释放的时间点。
  • 图片
  1. 定位到业务代码。
  • 图片
最近更新时间:2026.02.10 19:56:17
这个页面对您有帮助吗?
有用
有用
无用
无用