华为云社区(华为的社区)
159
2022-11-13
本文目录一览:
华为云开发者联盟社区很好。华为云开发者联盟社区旨在整合及协调产业链资源,为华为移动终端开发者提供全球化的平台服务,从开发、测试、推广、变现等环节全方位助力开发者,鼓励创新,提供平台资源扶持,在让核心伙伴开发者交流技术,共同创新,共建生态的开发者圈子。
本文分享自华为云社区《鸿蒙轻内核-内存调测-内存信息统计》,作者:zhushy 。
内存调测方法旨在辅助定位动态内存相关问题,提供了基础的动态内存池信息统计手段,向用户呈现内存池水线、碎片率等信息;提供了内存泄漏检测手段,方便用户准确定位存在内存泄漏的代码行,也可以辅助分析系统各个模块内存的使用情况;提供了踩内存检测手段,可以辅助定位越界踩内存的场景。
本文分析下内存信息统计。
内存信息包括内存池大小、内存使用量、剩余内存大小、最大空闲内存、内存水线、内存节点数统计、碎片率等。
LOSCFG_MEM_WATERLINE:开关宏,默认打开;若关闭这个功能,在 target_config.h 中将这个宏定义为 0。如需获取内存水线,需要打开该配置。
关键结构体介绍:
调用 LOS_MemInfoGet 接口,第 1 个参数是内存池首地址,第 2 个参数是 LOS_MEM_POOL_STATUS 类型的句柄,其中字段 usageWaterLine 即水线值。
同样调用 LOS_MemInfoGet 接口,可以获取内存池的剩余内存大小和最大空闲内存块大小,然后根据公式(fragment=100-最大空闲内存块大小/剩余内存大小)得出此时的动态内存池碎片率。
本实例实现如下功能:
1.创建一个监控线程,用于获取内存池的信息;
2.调用 LOS_MemInfoGet 接口,获取内存池的基础信息;
3.利用公式算出使用率及碎片率。
代码实现如下:
编译运行输出的结果如下:
本文分享自华为云社区《【高并发】你敢信?String类竟然是导致生产环境频繁内存溢出的罪魁祸首!!》,作者: 冰 河 。
最近,一名小伙伴跟我说:他写的程序在测试环境一点问题没有,但是发到生产环境却会频繁出现内存溢出的情况,这个问题都困扰他一周多了。于是乎,周末我便开始帮他排查各种问题。
在排查问题的过程中,我发现这位小伙伴使用的JDK还是1.6版本。开始,我也没想那么多,继续排查他写的代码,也没找出什么问题。但是一旦启动生产环境的程序,没过多久,JVM就抛出了内存溢出的异常。
这就奇怪了,怎么回事呢?
启动程序时加上合理的JVM参数,问题依然存在。。。
没办法,继续看他的代码吧!无意间,我发现他写的代码中,大量使用了String类的substring()方法来截取字符串。于是,我便跟到JDK中的代码查看传递进来的参数。
这无意间点进来的一次查看,竟然找到了问题所在!!
经过分析,竟然发现了JDK1.6中String类的一个大坑!为啥说它是个坑呢?就是因为它的substring()方法会把人坑惨!不多说了,我们先来看下JDK1.6中的String类的substring()方法。
接下来,我们来看看JDK1.6中的String类的一个构造方法,如下所示。
看到,这里,相信细心的小伙伴已经发现了问题,导致问题的罪魁祸首就是下面的一行代码。
在JDK1.6中,使用 String 类的构造函数创建子字符串的时候,并不只是简单的拷贝所需要的对象,而是每次都会把整个value引用进来。如果原来的字符串比较大,即使这个字符串不再被应用,这个字符串所分配的内存也不会被释放。 这也是我经过长时间的分析代码得出的结论,确实是太坑了!!
既然问题找到了,那我们就要解决这个问题。
既然JDK1.6中的String类存在如此巨大的坑,那最直接有效的方式就是升级JDK。于是,我便跟小伙伴说明了情况,让他将JDK升级到JDK1.8。
同样的,我们也来看下JDK1.8中的String类的substring()方法。
在JDK1.8中的String类的substring()方法中,也调用了String类的构造方法来生成子字符串,我们来看看这个构造方法,如下所示。
在JDK1.8中,当我们需要一个子字符串的时候,substring 生成了一个新的字符串,这个字符串通过构造函数的 Arrays.copyOfRange 函数进行构造。这个是没啥问题。
这里,为了更好的提升系统的性能,我也帮这位小伙伴优化了JVM启动参数。
经小伙伴授权, 我简单列下他们的业务规模和服务器配置:整套系统采用分布式架构,架构中的各业务服务采用集群部署,日均访问量上亿,日均交易订单50W~100W,订单系统的各服务器节点配置为4核8G。目前已将JDK升级到1.8版本。
根据上述条件,我给出了JVM调优后的参数配置。
至于,为啥会给出上述JVM参数配置,后续我会单独写文章来具体分析如何根据实际业务场景来进行JVM参数调优。
经过分析和解决问题,小伙伴的程序在生产环境下运行的很平稳,至少目前还未出现内存溢出的情况!!
如果在程序中创建了比较大的对象,并且我们基于这个大对象生成了一些其他的信息,此时,一定要释放和这个大对象的引用关系,否则,就会埋下内存溢出的隐患。
JVM优化的目标就是: 尽可能让对象都在新生代里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收。
华为云提供的大数据MRS服务可以提供租户完全可控的企业级大数据集群云服务,轻松运行Hadoop、Spark、HBase、Kafka、Storm等大数据组件。当前性价比很高,最小规格集群已经低至1.99元/小时,还有买10个月送2个月的活动。
在华为云社区找到了一个介绍MRS服务的云图说,可以点击查看MRS云图说。也可以到华为云MRS官方介绍页去看看。
本文分享自华为云社区《一文带你了解NB-IoT标准演进与产业发展》,作者:万万万。
我们都知道,物联网的场景和手机、电脑在使用的传统互联网是不太一样的。那么,就无线通信场景而言,物联网有什么样的特点呢?首先,感知层的物联网设备在进行数据收发的时候,那些数据包是比较小的,并且收发的频率也是比较低的,有的时候每天只需要发送不到十个数据。其次,为了提高物联网设备的使用寿命,这些设备对能源的消耗是比较小的,所以这也要求设备在通信的时候功耗也是要比较低的。
总结起来,就是无源、小包、偶发的通信需求。基于这样的场景需求,就要求通信网络必须要是功耗低,覆盖广的,也就是LowPowerWideArea的场景。
在LPWA场景当中,当下最热门的一项技术莫过于NB-IoT通信技术。它被广泛使用于现如今的公共事业、城市管理当中,所以了解NB-IoT的技术细节以及解决方案对学习物联网就显得很重要了。
本文将带大家详细了解NB-IoT标准演进与产业发展。
NB-IoT技术标准最早是由华为和沃达丰主导提出来的,之后又吸引了高通和爱立信等一些厂家。从一开始的NB-M2M经过不断的演进和研究,在2015年的时候演进为NB-IoT,在2016的时候,NB-IoT的标准就正式被冻结了。当然,NB-IoT的标准依然在持续的演进当中,在17年的R14当中就新增了许多特性,到了R14版本,NB-IoT具有了更高的速率,同时也支持站点定位和多播业务了。在2020年7月9日最新召开的会议上,NB-IoT这项技术已经被正式接纳为5G的一部分了。
这一事件对于NB-IoT来说有一个什么样的好处呢?当NB-IoT这项技术被归为5G的标准之后,也就是说,即使是通过NB-IoT接入网络的物联网设备,最终也可以连接5G核心网,享受5G的边缘计算、网络切片等一些服务。所以,这一事件对于NB-IoT来说是非常非常重要的。但是由于现阶段的NB-IoT并不支持接入5G网络,所以该技术在后续仍需要经过不断的演化和技术的演进才能进入5G网络当中。
图1全球运营商LPWA技术选择分布
从上图可知,全球大多数的运营商在进行LPWA技术选择的时候都是先选择去部署一张NB-IoT的网络,之后再去部署一张eMTC的网络。其原因在于运营商都是倾向于先去部署一张他们本来没有的网络,因为之前没有像NB-IoT这样的网络去支持低功耗广域网的场景,并且也从来没有专门为了设备去设计一张网络供物联网终端设备来使用。
之前所使用的运营商网络其实都是给人来使用的,为了方便人们的通信,所拥有的语音通信以及越来越高的传输速率等等。但是NB-IoT不一样,这张网络速率是非常慢的,人类去使用的话体验肯定是非常差的,但是这张网络对于底层的设备来说是非常合适的。原因之一是因为覆盖范围非常广,另一个原因是能耗低,速率低等。至于eMTC这张网络,它的速率相对于NB-IoT是要高的,并且还支持语音通信,所以它与用户现在正在使用的2G网络是比较相近的。所以在2G网络退网之后,运营商就可以选择使用eMTC去代替2G网络来进行使用,这就是大部分运营商选择先部署NB-IoT网络再部署eMTC网络的原因。
对于运营商来说,除了有选择技术的问题之外,另一个就是频谱选择的问题,因为这是一个避不开的问题。如果要满足低功率广域网的场景的话,网络的频段要够低,因为它既要满足广覆盖,还要满足网络的穿透性。大部分感知层的物联网设备,像气表、水表等,它们是被放在厨房的柜子里的,相当于是被层层遮蔽的,如果网络穿透力不够的话是没有办法跟设备进行连接的。
图2全球运营商NB-IoT频谱选择
同时,频段越低穿透性越强,频段越高穿透性越弱。所以由图2可以看到,对于运营商来讲,他们相当于把最合适的一部分频段都拿出来了。所以大部分的运营商都是在700到900M这一部分也就是SubG频段来进行部署。当然,也有少数的部分像中国联通他有一部分是放在1800M。所以在上文中提到的,NB-IoT网络主要是部署在SubG频段的,而不是说全部都是在SubG频段原因就在于此。
另外,由于NB-IoT的网络是基于4GLTE的网络的。所以运营商会在4G的基站中选择一部分基站去做软件升级来作为NB-IoT的基站。但是中国联通不一样,因为中国联通的4G基站就是基于3G基站升级得到的。所以就相当于它可以直接使用3G1800MHz的基站升级得到NB-IoT的基站,所以联通经过基站平滑升级之后,就直接在1800M使用NB-IoT网络,节省了很大的成本。这也就是为什么中国联通可以在1800MHz部署NB-IoT网络。
除了网络技术,基站和频段之外,如果想要使用这个网络也得有支持设备与基站连接的芯片。所以华为早在R13就推出了Boudica120芯片,由于它推出的比较早,所以芯片的功能并不是特别强,只支持SubG频段,并且也不支持移动性这些在R14才演进的特性。所以基于R14的一些新特性,华为又推出了Boudica150芯片来满足新特性的使用。
图3NB-IoT产业生态
图3为NB-IoT技术的应用情况,其实NB-IoT所涉及的领域是比较多的。像水表、气表、路灯、智能停车等等应用当中都有涉及。
发表评论
暂时没有评论,来抢沙发吧~