功能上新|内存篇:PSS显存、内存占用、堆内存对象快照

news2024/11/20 23:21:42

内存管理一直是游戏研发的重中之重,当项目运行时的内存压力较大时,更容易达到设备阈值引起闪退。近年来,当出海成为许多游戏公司新选择的同时,我们也发现海外设备对项目的内存情况有着更严格的要求。

为了帮助开发者更全面地了解项目的内存情况,UWA GOT Online最新版本提供了更多关于内存相关的参数,包括:
1. 新增PSS显存数据,配合PSS内存数据,可对项目的闪退风险进行管控;
2. 新增“内存占用”页,包含内存占用汇总、资源内存占用、资源对象快照,更高效地掌握各类资源内存占用趋势及详情;
3. 支持IL2CPP包的堆内存对象快照功能,进一步对堆内存分配情况进行优化。

PSS显存

为了对PSS内存进行进一步的细化拆分,UWA在GOT Online-Overview模式“运行信息”页中新增了PSS显存的内存趋势。

显存即项目运行时用于渲染的资源所占用的内存,该值为底层显卡驱动所反馈的内存分配量,包括纹理资源、Mesh资源以及解析这些资源的相关库所分配的内存等。当显存较高时,容易引起设备闪退,因此需要我们重点关注。

需要注意的是,由于安卓10、安卓11版本的底层限制,该设备在开机后每5分钟才会刷新一次PSS显存。因此在这些设备上,PSS显存曲线会呈现阶梯型变化,这也可能引起报告中PSS内存在某一帧内大幅上涨,所以当我们定位上涨原因时需要追溯前5分钟内发生的事件。

内存占用概览

GOT Online-Overview模式的内存分析模块下新增了内存占用页面,可以帮助开发者快速总览项目中各类资源的内存占用情况。在这个页面中,可以了解项目的内存分布,以及细分定位到哪些资源存在问题,大幅节省了逐个排查的时间。

1. 内存占用表
在内存占用表中,可以展示项目的PSS内存、Reserved Mono、资源内存占用情况,当在Overview模式下同时开启Lua测试时还可以查看到Lua堆内存占用。通过这些内存曲线,开发者可以快速判断是否存在内存泄漏的可能。其中,资源内存占用曲线表示测试过程中UWA采集到的所有资源内存占用之和。

UWA SDK默认会在测试开始、每千帧、场景切换、测试结束和手动进行资源对象快照(如下图“Dump”操作)时触发数据采样,其中仅手动进行资源快照时会采集当前帧所有资源的详细信息。

内存占用表中默认展示PSS内存、Reserved Mono、资源内存占用3条曲线,并且会在横坐标轴上标注资源对象快照帧。

当在Overview模式下同时开启Resource测试时,UWA SDK会采集运行过程中每个资源的详细数据。为了控制数据采集对造成的性能影响,各类资源会在不同帧分别进行数据采集。此时的资源内存占用是一条以60帧为步长的模拟加和曲线,数据准确性相对较低,默认不显示。

由于Overview模式下同时开启Resource测试会产生较大的性能消耗,造成测试时帧率下降、卡顿等,不建议在此时对项目的运行性能进行综合分析。

2. 资源内存占用 和 资源对象快照
资源内存占用表进一步展示了各类资源在测试过程中的内存情况,包括纹理、网格、动画、音频等11项资源。通过表格,不但可以观察各类资源的内存趋势,还可以快速判断项目中各个场景的内存压力主要来自哪类资源。

在未开启Resource模式的报告中选择资源快照帧,或在开启Resource模式的报告中选择任意帧时,网页下方会产生一张资源类型占比预览饼图和具体资源信息。

资源对象快照模块除了能帮助开发者快速判断各类资源在这一帧的内存占比外,还会在右侧的表格中按照内存占用从大到小的顺序,详细列举当前帧各类资源的资源数量、内存占用和推荐值。其中超过推荐值的内存占用项会被红字标出,以便开发者定位需要重点关注的资源类型。

在此表格中点击右侧的操作列,即可快速前往资源内存页下对应的资源的页签,对资源的具体资源使用情况进行进一步分析。

在资源内存页中,也会对资源对象快照帧进行标注,选中快照帧即可查看资源的详细信息。

内存占用页还支持对比功能。打开资源内存占用表右下角的对比模式,在未开启Resource模式时选择任意两个快照帧或在开启Resource模式选择任意帧,即可在页面下方对比两帧间所有类型资源的数量和内存占用大小。

堆内存对象快照

除了资源内存外,UWA也对Mono堆内存数据进行了更详细的采集分析。

在已支持IL2CPP包的Mono堆内存分配数据采集(需要满足Unity 2019.4及以上版本,且勾选Script Debugging选项的)的基础上,最新UWA SDK 2.4.7版本,新增“堆内存泄漏分析”中的“驻留堆内存分配函数”以及“堆内存对象快照”页,以便开发者对运行时的堆内存对象驻留情况进行详细地分析。

在测试时,根据测试开始前设置的Dump规则,在每固定间隔帧或手动Dump时,UWA会对堆内存对象进行数据采集。

开发者可以在“堆内存对象快照”页中的堆内存对象柱状图表中,从“堆内存对象大小”和“堆内存对象个数”两个维度,快速定位到哪些场景中存在需要优化的堆内存驻留问题。

堆内存对象分为Managed Object和内存碎片两部分,其中内存碎片中包含了“空闲激活内存”和“空闲碎片内存”。进行堆内存分配时,会优先使用“空闲激活内存”中可用的内存块,其次才会从“空闲碎片内存”中查找可用的内存块。

在柱状图下方,会显示选中帧所有类型的Managed Object大小、对象类型总数、对象类型个数、内存碎片占比。右侧饼状图会展示前10位和其他类型的对象和的占比,以便开发者对这一帧的堆内存对象情况有一个更直观的了解的同时,快速锁定Mono堆内存瓶颈。

同时,在饼图下方的对象类型表中,也将展示出这一帧所有对象的类型、大小、占比、对象个数等信息。在展开对象类型后,开发者就可以快速定位到调用此对象类型的所有函数和选中函数的倒序调用路径。

通过这张表格,可以更精确地定位堆内存分配的出处,并通过在代码中搜索对应的子函数,更高效地对其堆内存分配进行优化。


希望通过上述功能,UWA可以帮助开发者全面了解项目的内存压力的同时,能更精准地定位这些内存压力具体来自哪些场景和资源,以便快速查找并修复,起到事半功倍的效果。

更多UWA GOT Online的新功能等你来解锁!可前往UWA官网下载SDK,下载链接:UWA | 致力于游戏VR和AR应用提供项目研发解决方案 | 简单优化、优化简单 | 侑虎科技

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从内核角度剖析Netty高性能的奥秘IO多路复用模型与Reactor模式

Netty 是Jboos 提供的java开源框架, 是基于非阻塞IO(NIO)的客户端/服务器编程框架, 它既能快速开发高并发、高可用、高可靠的网络服务器程序,也能开发高可用、高可靠的客户端程序。 Netty 作为异步框架, N…

面试:从输入URL到页面加载的全过程

首先在浏览器中输入URL 查找缓存:浏览器先查看浏览器缓存-系统缓存-路由缓存中是否有该地址页面,如果有则显示页面内容。如果没有则进行下一步。 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求…

【算法排序】动态规划

目录 一、动态规划思想二、动态规划与分治法的区别1、共同点2、不同点 三、动态规划特征1、最优子结构2、重叠子问题 四、动态规划求解问题的基本步骤五、斐波那契数分析六、实现思路七、代码实现 一、动态规划思想 将待求问题划分为若干个子问题,按划分的顺序求解…

为什么袁隆平的英语这么好?这才是学到老的典范!

文 / 冰雪(微信公众号:王不留) 2021年5月22日13时07分,“共和国勋章”获得者、中国工程院院士、国家杂交水稻工程技术研究中心主任、湖南省政协原副主席袁隆平,因病逝世,享年91岁。 一晃两年过去了。袁隆平…

iTOP-RK3568开发板编译瑞芯微原厂源码

1 输入以下命令设置 java 版本为 1.8 版本,确认 java 版本是 1.8 版本之后,才可以进行下一步编译,如下图所示: source javaenv.sh java -version 2 输入命令配置 Android 分支 source build/envsetup.sh lunch rk3568_r-user…

【软考】系统集成项目管理工程师 第3章 信息系统集成专业技术知识

文章目录 3.1 信息系统建设3.1.1 信息系统的生命周期3.1.2信息系统开发方法 3.3 软件工程3.3.1软件需求分析与定义3.3.2软件设计、测试与维护3.3.3软件质量保证及质量评价3.3.4软件配置管理3.3.5软件过程管理3.3.6软件开发工具3.3.7软件复用 3.4 面向对象系统分析与设计3.4.1面…

ESP32-WROOM-32 TCP通讯AT指令例程

ESP32-WROOM-32 AT指令配置TCP通讯 ESP32-WROOM-32前言固件烧录测试AT指令TCP通讯\透传ESP32配置SoftAPESP32作TCP Client连接TCP Server通讯/透传普通传输模式演示WIFI透传演示 ESP32做TCP Server连接TCP Client通讯演示 ESP32-WROOM-32 前言 软硬件准备: ESP32-W…

自动驾驶行业迎来大规模发展,“高精度定位”重要性凸显

5月16日,2023 中国 (亦庄) 智能网联汽车科技周暨第十届国际智能网联汽车技术年会在北京隆重召开。工信部装备工业一司一级巡视员苗长兴在在会上表示:2022 年我国搭载辅助自动驾驶系统的智能网联乘用车新车销售量达 700 万辆,同比增长45.6%&am…

计算机操作系统(慕课版)第三章课后题答案

一、简答题 1.高级调度与低级调度的主要任务是什么?为什么要引入中级调度? 1)高级调度的主要任务是将外存的作业调入内存,又称作业调度; 低级调度的主要任务数为内存中处于就绪态的作业分配处理机。 2)为了…

小航助学2023年3月GESP_C++二级试卷(含题库答题软件账号)

GESP在线模拟训练系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手 答案:D 第1题以下存储器中的数据不会受到附近强磁场干扰的是( )。 A、硬盘B、U 盘C…

共享单车之数据存储-获取工作簿中的数据

第1关:获取工作簿中的数据 任务描述 本关任务:获取data.xls文件中的数据。 相关知识 获取工作簿中的信息,我们可以使用Java POI(POI是一个提供API给Java程序对Microsoft Office格式档案读和写的功能)提供的Workboo…

二十三种设计模式第七篇--适配器模式

适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于 结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 我们生活中…

注意!ChatGPT的Plus账号也会被封禁

文 / 高扬(微信公众号:量子论) 最近经常看到有人丢个截图,然后悲伤地说,ChatGPT账号被封了。 这不是账号被封,而是所用的代理节点被OpenAI封了,换个节点即可。 这个截图才是账号真正被封的提示&…

LeetCode 1080. 根到叶路径上的不足节点

【LetMeFly】1080.根到叶路径上的不足节点 力扣题目链接:https://leetcode.cn/problems/insufficient-nodes-in-root-to-leaf-paths/ 给定一棵二叉树的根 root,请你考虑它所有 从根到叶的路径:从根到任何叶的路径。(所谓一个叶子…

使用GPT-4.0编写量化交易策略:方法、案例与参数优化

量化策略开发,高质量社群,交易思路分享等相关内容 『正文』 ˇ 随着人工智能的发展,GPT-4.0已经成为量化交易策略编写的强大工具。在这篇文章中,我们将探讨如何使用GPT-4.0编写量化交易策略,并提供一个实际的案例。我…

Maven基础学习---5、其他核心概念

1、生命周期 1、作用 为了让构建过程自动化完成,Maven设定了三个生命周期。生命周期中的每一个环节对应构建过程中的一个操作。 2、三个生命周期 3、特点 前面三个生命周期彼此都是独立的在任何一个生命周期内部,执行任何一个具体环节的操作&#xff…

ElasticSearch 的DSL查询文档

一、DSL查询文档 本章目标 文本检索:match_all、match、multi_match精确查询:term、range地理坐标查询:geo_distance复合查询:function_score、bool 1. 说明 查询语法: GET /索引库名/_search {"query": {}…

基于C++实现房贷计算器的设计

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本次项目的要求是完成一个房贷计算器的设计,实现商业贷款、公积金贷款和组合贷款的利息计算三种功能。并且使用Qt或其他的界面库设计人机交互界面,要求界面友好方便使用。并且必须使用面向对象的思想进…

NSS周常刷密码(1)

感觉没怎么做密码,就每周上nss随便做点 稍微难点的会分析 [SWPU 2020]happy import gmpy2 from Crypto.Util.number import * import z3c 0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9e e 0x872a335 #q q*p^3 128536731745208998078944182958039785532190189…

ChatGPT 4.0大升级,能替代留学中介吗?

ChatGPT4.0发布了! 在之前轰动世界版本的基础上又有了大幅度升级,根据官方介绍,它的输入可以是文字(上限2.5万字)还可以是图像,是一个超大的多模态模型。 越来越多的人开始好奇这个东西到底能用来做什么&…