Skip to content

Unity 运行时 GPU / CPU / 内存监控 ​

Unity 打包后的应用里,CPU 和内存还能想办法读,GPU 使用率是真没有现成接口。这套方案在运行时把三项指标都采上来,给性能定位和稳定性治理供数据。

技术问题 ​

虚拟人 PC 端应用出现卡顿、掉帧时,第一反应是看资源占用:是 CPU 算不动了,内存涨了,还是 GPU 打满了。但 Unity 编辑器里的 Profiler 只能在开发环境用,打包发布后的应用是一个黑盒——线上用户机器上发生了什么,没有数据就全靠猜。

要在线上环境做性能定位,必须在打包后的应用程序里持续、实时地采集 GPU、CPU 和内存使用率。

现有方案不足 ​

  • 引擎不暴露运行时指标:Unity 引擎本身不提供打包后应用读取系统资源使用率的功能,Profiler 能力随编辑器一起被留在开发环境。
  • GPU 采集是空白:当时市面上没有针对 Unity 引擎运行时实时获取 GPU 使用率的功能,CPU 和内存尚有系统层路径,GPU 这一项是缺失的。
  • 外部工具不解题:让用户或测试单独开系统监控工具,数据和应用行为对不上时间轴,无法支撑定位。

核心思路 ​

在应用内部建一条采集链路,按数据源分头突破,统一上报:

mermaid
flowchart TD
    A["Unity 打包应用运行时"] --> B["CPU 使用率采集<br>系统层接口"]
    A --> C["内存使用率采集<br>系统层接口"]
    A --> D["GPU 使用率采集<br>平台能力补齐"]
    B --> E["运行时聚合与展示"]
    C --> E
    D --> E
    E --> F["性能定位<br>稳定性治理数据"]
  • CPU / 内存:走操作系统层面的接口读取进程与整机使用率,封装进应用运行时。
  • GPU:这是方案的核心差异点。引擎不给,就从平台层补齐采集能力,把实时 GPU 使用率变成应用内可读的指标。
  • 统一聚合:三项指标在同一时间轴上聚合,卡顿现场可以直接对照「哪一项先打满」,把定位从猜变成看。

采集本身必须轻量——监控工具自己吃掉几个点的 CPU,就成了被观测系统的一部分,这是设计时就要守住的约束。

应用场景 ​

  • PC 端虚拟人应用的线上性能定位:卡顿现场直接读取三项使用率判断瓶颈方向。
  • 稳定性治理:长期的资源占用趋势作为劣化预警和回归验证的数据来源。
  • 测试与发布环节:中低端机型上验证资源开销是否达标。

关联案例 ​

罗子初 · AI 座舱专家 · 8年端侧研发

Lv.1