CPU 和内存监控
捕获 CPU 以及 Android 和 iOS 应用的内存使用情况。
当应用位于前台时,每 5 秒捕获一次 CPU 和内存使用情况。读数会出现在 Session Timeline 中。
CPU 用法
读数显示应用使用了多少 CPU。持续的高使用率会耗尽电池电量并使设备升温。
Android
每个读数都是自上一个读数以来所有核心的平均 CPU 使用率:100% 表示每个核心都完全忙碌。计算自/proc/self/stat,其中操作系统记录进程在 CPU 上花费的时钟周期:
%CPU = 100 × ticks consumed / (clock tick rate × interval × number of cores)iOS
每次读数都是应用所有非空闲线程的综合使用情况,其中 100% 等于一个完全繁忙的核心。在具有多个内核的设备上,该值可能会超过 100%。线程列表来自 task_threads,每个线程的使用情况来自 thread_info。
内存使用情况
Android
每个阅读报告:
- 最大堆大小:运行时允许应用在 Java 堆上分配的最大内存。超过后会抛出
OutOfMemoryError。 - 总堆大小和空闲堆大小:运行时到目前为止保留的堆内存,以及其中多少仍然是空闲的。
- RSS(resident set size):进程持有的物理内存,包括 native code 和共享库。共享页面会被完整计数,因此 RSS 会高估应用自身的使用量。
- 总 PSS(proportional set size):共享页面按使用它们的进程比例分摊后的物理内存。PSS 是判断应用整体内存使用情况的最佳值。
- native heap 总大小和可用大小:native heap 中的总内存和可用内存。
值来自:
| 价值 | 来源 |
|---|---|
| 堆大小 | Runtime.maxMemory, Runtime.totalMemory, Runtime.freeMemory |
| 总PSS | Debug.getMemoryInfo |
| native heap 大小 | Debug.getNativeHeapSize, Debug.getNativeHeapFreeSize |
| RSS | /proc/self/statm |
iOS
每次读取都会报告应用的物理内存占用量:应用负责的内存,包括系统压缩的内存。系统会使用此值来决定在内存压力下终止哪些应用。
足迹的读取方式为task_info。当该值不可用时,SDK 会回退到常驻大小,这不包括压缩内存,并且可能会少报使用情况。
iOS 内存深度探究解释了 Apple 如何定义这些值。