KKMonitor

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 中的总内存和可用内存。

值来自:

iOS

每次读取都会报告应用的物理内存占用量:应用负责的内存,包括系统压缩的内存。系统会使用此值来决定在内存压力下终止哪些应用。

足迹的读取方式为task_info。当该值不可用时,SDK 会回退到常驻大小,这不包括压缩内存,并且可能会少报使用情况。

iOS 内存深度探究解释了 Apple 如何定义这些值。