如何读懂UWA性能报告?

简介:

性能总结,反应项目性能的状况以及严重性

UWA Tech Doc

1. 总体帧数:真人真机测试十分钟左右得到的帧数(专业会员15分钟左右)
你也许会问:游戏帧数越高越好吗?
理论上来说,是的。以一秒30帧为例,10分钟测试下来,理想的性能帧数可以跑到16000~18000帧左右。所以,如果你的项目帧数较低,那么你的游戏可能正在经受一定的帧率卡顿问题。

2. GC次数:测试过程中系统垃圾回收操作(Garbage Collection)的调用次数
需要注意的是,每次GC调用均会造成一定程度上的卡顿,降低了项目运行的流畅度。如果开发人员的逻辑代码分配堆内存过大过快的话,则GC调用的次数也会随之增加。那么标准是什么呢?我们建议把这个频率控制在1000帧/次以上,当然数值越大越好!

3. CPU均值:测试过程中平均每帧的CPU占用
UWA提供了多种测试机,覆盖了市面上高/中/低档的主流机型,如小米系列、三星系列等。一般来说,相同测试条件下,设备性能越好,CPU耗时的均值肯定是越低的。


很多朋友上来直接问,我们项目想优化到50+、60的fps,这个可能吗?

UWA Tech Doc

CPU耗时超过33ms的帧数耗时超过了68%(请注意,UWA的建议是低于10%),超过50ms的帧数耗时达到35%,我相信开发者看到这个数据的时候,一定是这样的:

UWA Tech Doc

莫着急,其实谁的项目优化前不是这样呢?等优化N轮后再晒晒美丽的性能数据吧,只要功夫深,铁杵磨成绣花针!

UWA Tech Doc

好的,那么我们喝口凉水压压惊,继续来看下面CPU占用走势图:
UWA Tech Doc
各个模块的CPU耗时走势图在这里是一清二楚的,也就是告诉大家哪些模块需要你们大动刀子了。未来的连载篇中我们会就具体模块给大家作一一介绍。


谈优化必谈内存

UWA报告中先给出了两个大指标:总内存和堆内存,也是项目负责人、发行运行商比较关注的指标。同样,由于内存模块是重中之重,UWA报告中对该模块进行了深度剖析,包括Reserved Total,Used Total等细分指标,能反应内存分配是否合理、堆内存是否增加过多以及是否存在内存泄露等重大问题。我们回头会逐一说明。
UWA Tech Doc
上图中,项目(卡牌类型)的总内存峰值为289MB,堆内存峰值为76MB,小编觉得有点过高了哦。那么内存把控多少是比较合理的呢?

1、内存
我们建议把内存把控在150MB以内。这是经过了大量的项目优化后的经验数值。其实,对于目前市场主流的Unity游戏来说,其内存占用主要集中在120~200MB。同时,顾及到例如iPhone 4和512MB/768MB等低端Android机型,其应用的自身总体内存占用不可超过200MB(iPhone 4的安全线应该在180MB左右),所以我们将Reserved Total设定在150MB,这是Unity引擎的自身内存分配。另外,某些渠道对Android游戏的PSS内存进行了严格的限制。一般要求游戏的PSS内存在200MB以下。这是我们将Reserved Total内存设定在150MB的另外一个重要原因。

不过呢,考虑到现在设备越来越高端,不少开发团队为了彰显美术表现力而舍弃了低端设备。 个人也觉得稍微高出这个标准也是无可厚非的事,更何况《六龙争霸》都在三星S3上跑到了221MB呢,当然未来UWA也会不断更新我们的测评机制,给大家一个更有时效性和差异性的标准啦。

2、堆内存
我们建议把堆内存把控在40MB以内。目前Unity所使用的Mono版本有这么个特点,即:Mono的堆内存一旦分配,就不会返还给系统。这意味着Mono的堆内存是只升不降的。在移动设备上的内存占用可谓是寸土寸金,因此我们要着重对堆内存把把关。


哪些函数是造成性能问题的罪魁祸首呢?

根据二八定律,80%的性能问题出在20%的性能瓶颈之中。我们的总结报告中也给大家罗列出来了。

1.高CPU占用函数

请输入图片描述
2.高堆内存分配函数
请输入图片描述
该部分所列出的代码函数既包含引擎模块函数,也包含自己的逻辑代码函数。小编再次提醒,由于这些函数占据了项目80%的性能开销,所以一定要各个击破!另外在UWA报告中的“代码效率”一栏中,我们也能查看到每个函数的具体调用情况,包括其调用次数、耗时分布、相关堆栈等信息,我们将在后期给大家做出详解。


关于任务列表

另外要提一下的是,测评报告还根据性能状态给出了优化任务列表,按照问题的严重程度设置了优先级,并对每个优化任务给出了需要检查或优化的步骤。
请输入图片描述

小编建议大家按照上面的顺序来进行优化,特别是在项目非常紧急的情况下,因为很多性能问题其实是相互牵制的,比如堆内存分配过高会加速GC的到来等等。当我们把这些大头都优化一轮之后再提交上来复测下,说不定效果立竿见影呐!





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
4月前
|
存储 消息中间件 关系型数据库
告别资源瓶颈,函数计算驱动多媒体文件处理-测评报告
【8月更文第2天】在体验过程中,整体来说文档和帮助资料是充足的。文档覆盖了从环境搭建到部署运行的全过程,并且提供了详细的步骤说明和注意事项。然而,在某些高级配置和特定问题的解决方面,文档还可以进一步丰富:
71 3
|
5月前
|
存储 JSON JavaScript
小程序优化:第三方SDK过大解决方案
小程序开发中,项目目录中存放过大的js包,会被警告影响手机端性能,同时让开发编译启动变得很慢。慢是其次,单是影响性能这一点,就需要解决一下。
|
Java 关系型数据库 MySQL
19-案例实战剖析-日处理上亿数据的系统内存分析和优化
这是当时开发中遇到的一个真实场景,也是大部分人在开发项目中有可能会遇到的一些场景,该系统主要是做大数据相关计算分析的,日处理数据量在上亿的规模。这里我们重点针对JVM内存的管理来进行模型分析,数据的来源获取主要是MYSQL数据库以及其他数据源里提取大量的数据,通过加载到JVM内存的过程我们来一起分析出现的问题以及如何优化解决
114 0
19-案例实战剖析-日处理上亿数据的系统内存分析和优化
|
消息中间件 Arthas 运维
日志瘦身骚操作:从 5G 优化到 1G,牛逼!!
日志瘦身骚操作:从 5G 优化到 1G,牛逼!!
|
Web App开发 JavaScript 前端开发
国内第一篇讲如何减少卡顿的代码级别详细文章
国内第一篇讲如何减少卡顿的代码级别详细文章
170 0
国内第一篇讲如何减少卡顿的代码级别详细文章
超过6G的大文件是如何读取的,附源代码。含有网上很少有论述的信息
读取大文件有如下两种方法,一是用fopen打开文件,fgetline循环读取,fclose关闭文件;二是用open打开函数,用lseek获取文件大小,用mmap大文件内存映射,用munmap关闭内存映射,用close关闭文件句柄。方式一教慢,就不再详细描述。主要描述方式二。
|
Arthas 监控 Java
XPocket插件使用案例合集——性能问题排查分析,一个XPocket足以!
XPocket插件使用案例合集——性能问题排查分析,一个XPocket足以!
|
SQL 消息中间件 存储
一份平民化的应用性能优化检查列表(完整篇)
1.总原则 一些正确但稍显废话的原则,但能指导后面每个章节的优化,所以还是要啰嗦一次。 可扩展性架构,堆机器能不能解决问题是最最优先考虑的问题 去中心化的点对点通信,优于通过中心代理的通信 池化的长连接,优于短连接 二进制数据,优于文本数据 尽量减少交互,一次调用的粗粒度聚合接口 优于 多次调用的细粒度接口 尽量减少交互,批量接口优于循环调用 尽量只交互必要的数据 尽量就近访问 尽量使用缓存 总是设定超时 在合适的场景,并行化执行 在合适的场景,异步化执行 2.环境准备 保证符合自家各种规范(没有的话赶紧回家写一个),尤其线下压测服务器的配置要与生产环境一致。 2.1 操作系统 自家
145 0