性能优化之三——手机发热


用简单通俗易懂的话和可执行方式来定位手机发热
在这里插入图片描述

1.手机发热成因

1.手机发热上限

手机CPU温度在50度以下即为正常温度。在一般情况下,手机CPU的温度应当控制在不超过室内的温30度以上,也就是说室温是20度,手机CPU温度就应该控制在不超过50度为宜。
为什么是这个值,因为超过这个值,CPU的硅片会受到影响,从而影响运算效率,手机更加卡顿。在实际上的应用开发中,静态APP一般都是在室温上下(35度左右),长时间集成语音/视频会增加10度,40度左右,但是还是会有感觉。但是,如果达到50度,用户会有很强的感受。尤其是超过37度(人体温度)
这个值的获取,估计是驱动人生等应用结合经验确定的。

2.手机发热成因

1.定性

CPU与GPU占用率过高。当占用率高的时候,参与运算的晶体管越多,那么由于输入功率大部分转化为热能,所以,产生的热量会更多。

2.定量

由于未找到TDP 热设计功耗公式,不展开。

2.CPU占用率查看方法

1.查看工具

1.使用外部第三方工具来辅助测试,比如:腾讯 GT,网易 Emagee 等
2.Linux top 命令(有误差,易获取)

2.top命令

adb shell top //动态变化CPU占用率

adb shell top -m 10 -s CPU //可查看占用 CPU 最高的前 10 个程序(-t 显示进程名称,-s 按指定行排序,-n 在退出前刷新几次,-d 刷新间隔,-m 显示最大数量)

adb shell top -n 1| grep PackageName /自己应用

在这里插入图片描述
在这里插入图片描述

3.打印信息参数诠释

这里引入了 Jiffies(时间片)的概念,Jiffies 的介绍如下:

Jiffies 为 Linux 核心变数,是一个 unsigned long 类型的变量,它被用来记录系统自开机以来,已经过了多少 tick。每发生一次 timer interrupt,Jiffies 变数会被加 1

而上面每一列的数值含义如下:
user :从系统启动开始累计到当前时刻,用户态的 jiffies ,不包含 nice 值为负进程;
nice :从系统启动开始累计到当前时刻,nice 值为负的进程所占用的 jiffies;
system :从系统启动开始累计到当前时刻,系统态的 jiffies;
idle :从系统启动开始累计到当前时刻,除硬盘 IO 等待时间以外其它等待的 jiffies;
iowait : 从系统启动开始累计到当前时刻,硬盘 IO 等待的 jiffies;
irq : 从系统启动开始累计到当前时刻,硬中断的 jiffies;
softirq :从系统启动开始累计到当前时刻,软中断的 jiffies。
总的 Jiffies 就是上面所有项加起来的总和。因此我们计算一段时间的 CPU 占用率的时候就可以使用:
total=user+system+nice+idle+iowait+irq+softirq
*CPU usage=[(user_end +sys_end+nice_end) - (user_begin + sys_begin+nice_begin)]/(total_end - total_begin)100

上述方法统计的是当前系统所有进程的 CPU 总和使用率

3.CPU高占用率定位

我们最终肯定是优化我们的代码,那么就需要知道具体是哪行代码占用了高CPU,这时候我们用Android Studio的Monitor就可以了,打开Android Studio的Monitor(请保持adb连接你的设备),如下图点击CPU的时钟按钮开始跟踪APP CPU调用:

4.巨人肩膀

1.APP测试精讲:移动端性能专项测试之 CPU过热

2.ANDROID应用开发之CPU优化

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 采用随机分区:通过将数据随机分布到不同的分区中,可以避免数据倾斜的问题。 2. 采用哈希分区:通过将数据按照哈希函数的结果分配到不同的分区中,可以有效地解决数据倾斜的问题。 3. 采用聚合操作:通过对数据进行聚合操作,可以将数据分散到不同的分区中,从而避免数据倾斜的问题。 4. 采用重分区:通过将数据重新分区,可以使数据更加均匀地分布到不同的分区中,从而避免数据倾斜的问题。 5. 采用广播变量:通过将小数据集广播到所有的节点上,可以避免数据倾斜的问题。 6. 采用随机抽样:通过对数据进行随机抽样,可以避免数据倾斜的问题。 7. 采用数据倾斜检测:通过对数据进行倾斜检测,可以及时发现数据倾斜的问题,并采取相应的措施进行优化。 ### 回答2: Spark是当前最为热门的数据处理框架之一,但是随着数据量的增大,数据倾斜问题也随之出现,影响了Spark的性能。数据倾斜指的是某些数据片段比其他数据片段要大很多,从而导致Spark中的任务无法平衡地处理这些数据片段,导致一些节点的处理时间变长,性能下降。 解决Spark数据倾斜可以通过以下n种姿势: 1. 使用repartition操作:通过对数据重新分片来平衡数据倾斜。可以通过设置合适的分片数来避免数据倾斜问题,并提高Spark的性能。 2. 使用broadcast操作:可以减少数据的传输量并减轻网络负载,从而提高Spark的性能。同时,也可以通过对不平衡的数据进行broadcast操作来减少数据倾斜。 3. 使用map-side join操作:对于数据量较小的表,可使用Map-side join将这些小表广播到所有的节点上进行join操作,从而减少join操作中的数据倾斜。 4. 使用groupByKey和reduceByKey操作时,避免出现大量相同的键:在键的数量很大的情况下,可把数据划分为多个小表。同样,在使用groupByKey和reduceByKey操作时,应该尽量避免相同的键出现,从而减少数据倾斜。 5. 使用自定义分区操作:在对数据进行分区时,可以定义自己的分区方式,根据不同的分区策略来分配数据。从而避免数据倾斜问题的出现。 总之,解决Spark数据倾斜问题需要综合考虑多种解决方案,需要在具体的业务场景下进行分析和选择合适的解决方案。同时,也需要了解Spark基础知识,熟练使用相关API和工具,才能解决数据倾斜问题,并提高Spark的处理性能。 ### 回答3: Apache Spark作为一种通用的大数据处理框架,性能一直是其关注的重点。其中,数据倾斜(data skew)是影响Spark性能和可靠性的一大问题,它会导致某些节点的处理任务时间过长,影响整个作业的完成时间。 针对Spark数据倾斜问题,可以采取以下n种解决方法: 1. 均衡数据:将数据划分为更小、更均衡的数据块,提高数据分配的粒度,尽量减少数据分发时的数据倾斜。通过使用Spark默认的哈希分区方式,将数据均匀分配到各个节点上。 2. 重分区:在数据倾斜的情况下,可以通过采用重分区的方式,进一步将数据细分为更多分区,以期达到更好的负载均衡效果。使用repartition或coalesce方法,将数据按照需要的分区数进行调整。 3. 增加并行度:Spark的并行度是关键的性能指标之一,可以适当增加并行度来提高作业的处理效率。通过对Spark的配置参数进行调整,如调整spark.default.parallelism参数,增加RDD的分区数量,从而提高Spark并行处理的能力。 4. 聚合操作:数据倾斜可能是由于聚合操作出现了极值,导致操作的瓶颈出现在某一个分区,可以使用更复杂的聚合操作,如扩散聚合(broadcast join)和累加器(aggregators)等来避免数据倾斜。 5. 分桶:Spark SQL提供的分桶操作可以在数据分析过程中更好地利用Spark的并行处理。将数据分成多个桶(bucket)存储,在执行聚合计算时,可以通过对每个桶中的数据单独执行计算操作,从而有效避免数据倾斜的问题。 总的来说,解决Spark数据倾斜问题需要同时考虑数据本身的特点,调整Spark的配置参数和操作方式等多个方面。只有综合考虑到多个因素,才能有效地提高Spark大数据处理的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值